개발서적/자바 ORM 표준 JPA

[자바 ORM 표준 JPA 프로그래밍] 4.1 - 4.3 @Entity, @Table, 다양한 매핑

Reference. 자바 ORM 표준 JPA 프로그래밍

책 목차 및 이전 글

4.1 @Entity

들어가기 전

  • JPA에서 가장 중요한 일은 엔티티와 테이블을 정확히 매핑하는 작업
  • JPA는 다양한 매핑 어노테이션을 지원, 크게 4가지로 분류 가능
    • 객체와 테이블 매핑: @Entity, @Table
    • 기본 키 매핑: @Id
    • 필드와 컬럼 매핑: @Column
    • 연관관계 매핑: @ManyToOne, @JoinColumn

4.1 @Entity

  • 테이블과 매핑할 클래스는 @Entity 어노테이션이 필수
  • @Entity 속성

    @Entity속성

    속성 기능 기본값
    name JPA에서 사용할 엔티티 이름을 지정, 보통 기본값인 클래스 이름을 사용 만약 다른 패키지에 이름이 같은 클래스가 있다면 충돌하지 않도록 지정 설정하지 않으면 클래스 이름을 그대로 사용(Member)
  • @Entity 주의 사항
    • 기본 생성자는 필수 (파라미터 없는 public 또는 protected 생성자) → JPA가 엔티티 객체를 생성할 때 기본 생성자를 사용
      public class Member {
      		public Member() {
      		}
      }
    • final 클래스, enum, interface, inner 클래스에는 사용 못함
    • 저장할 필드에 final 못씀

4.2 @Table

  • 엔티티와 매핑할 테이블을 지정
  • @Table 속성

@Table속성

속성 기능 기본값
name 매핑할 테이블 이름 엔티티 이름을 사용
catalog catalog 기능이 있는 데이터베이스에서 catalog 매핑  
schema schema 기능이 있는 데이터베이스에서 schema 매핑  
uniqueConstrainsts (DDL) DDL 생성 시에 유니크 제약조건을 생성 2개 이상의 복합 유니크 제약조건도 가능 스키마 자동 생성 기능을 사용해서 DDL 만들때 사용  
제목 없음    

 

4.3 다양한 매핑 사용

  • JPA 시작하기 장에 Member 테이블에 요구사항이 아래의 조건으로 추가 됌
  1. 회원은 일반 회원과 관리자로 구분
  1. 회원 가입일과 수정일이 존재
  1. 회원을 설명할 수 있는 필드가 존재하며, 필드는 길이 제한이 없음
Member.java
@Entity
@Table(name="MEMBER")
public class Member {

    @Id
    @Column(name = "ID")
    private String id;

    @Column(name = "NAME")
    private String username;

    private Integer age;

    //=== 추가
    @Enumerated(EnumType.STRING)
    private RoleType roleType;        // ----- 1

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdDate;         // ----- 2

    @Temporal(TemporalType.TIMESTAMP)
    private Date lastModifiedDate;    // ----- 2

    @Lob
    private String description;       // ----- 3

    @Transient
    private String temp;
RoleType.java
public enum RoleType{
		ADMIN, USER
}
  • 위에 회원 코드 분석
    • roleType
      • 자바의 enum을 사용해서 타입 구분, 일반 회원은 USER, 관리자는 ADMIN
      • enum을 사용하려면 @Enumerated 어노테이션 매핑 필요 (4.7.2절 참고)
    • createdDate, lastModifiedDate
      • 자바의 날짜 타입은 @Temporal을 사용해서 매핑 (4.7.3절 참고)
    • description
      • 이 필드는 길이 제한이 없으므로 데이터베이스의 varchar 대신 CLOB으로 저장 필요