해당 클래스에 @Entity를 추가하면 해당 객체와 DB 테이블이 매핑된다.

 

우리는 이를 엔티티 클래스라고 한다.

 

@Entity와 @MappedSuperClass 가 있는데 두 가지에 대해서 간단히 알아보겠다.

 

@MappedSuperClass

  • 가장 중요한 점은 @MappedSuperClass가 선언되어 있는 클래스는 엔티티가 아니다.
  • 부모 클래스임을 지정하며 자식 클래스가 테이블로 생성할 때 부모 클래스의 변수는 자동적으로 자식 클래스의 필드에 생성된다.
  • 상속 관계 매핑이 아니다.
  • 직접 생성해서 사용할 일이 없으므로 추상 클래스로 만드는 것을 권장한다.
  • 테이블과 관계가 없고, 단순히 엔티티가 공통으로 사용하는 매핑 정보를 모으는 역할을 한다.
  • 주로 등록일, 수정일, 등록자, 수정자 같은 전체 엔티티에서 공통으로 적용하는 정보를 모을 때 사용한다.
  • @CreatedDate : 작성일
  • @LastModifyDate : 수정일

@Entity

  • 객체를 테이블과 매핑할 엔티티라고 JPA에게 알려주는 역할을 한다.
  • 즉, 엔티티 매핑을 한다고 알리는 애노테이션이다.
  • JPA에서 @Entity 클래스는 @Entity나 @MappedSuperclass로 지정한 클래스를 상속할 수 있다.
  • 기본 생성자가 존재해야 한다.
  • final class, inner class, enum, interface에는 사용할 수 없다.
  • 필드에 final을 사용하면 안 된다.
  • 기본 값으로 클래스 이름을 엔티티 이름으로 사용한다.
  • name : 다른 패키지에 이름이 같은 엔티티 클래스가 있다면 이름을 지정해서 충돌하지 않도록 해야 한다.

@Table

  • 엔티티 클래스에 매핑할 테이블명을 선언하기 위함이다.

@Id : PK를 설정하는 애노테이션이다.

 

@GenerateValue : 데이터 자동으로 증가

 

@Column

  • name : 필드와 매핑할 테이블의 컬럼 이름(기본값은 필드 이름)
  • nullable : null 값 허용 여부를 설정한다. 기본 값은 true이며, false인 경우 테이블 정의 시 필드에 Not Null 제약 조건이 붙는다.
  • length : 문자 제약 조건으로 기본 값을 255이며, String 타입에만 적용 가능하다.

@Temporal

  • TemporalType.DATE : 년-월-일의 date 타입
  • TemporalType.TIME : 시:분:초의 time 타입
  • TemporalType.TIMESTAMP : date + time의 timestamp(datetime) 타입 -> 방언에 의해 자동으로 작성

@Transient

  • @Transient 애노테이션이 있는 필드는 매핑이 이루어지지 않는다.
  • 즉, DB에 저장하지 않고 조회하지도 않는다.
  • 객체에 임시로 어떤 값을 보관하고 싶을 때 사용할 수 있다.

@Enumerated

  • 자바의 enum 타입을 매핑할 때 사용한다.
  • EnumType.ORDINAL : 기본 값이며, enum의 순서를 DB에 저장(순서는 순서 변경에 따라 문제가 생길 수 있다.)
  • EnumType.STRING : 이름을 DB에 저장(권장)

임베디드 타입

  • @Embeddable : 값 타입을 정의하는 곳에 표시
  • @Embedded : 값 타입을 사용하는 곳에 표시
  • 임베디드 타입은 엔티티의 값일 뿐이다.
  • 임베디드 타입을 사용하기 전과 후에 매핑하는 테이블은 같다.
  • 객체와 테이블을 아주 세밀하게 매핑하는 것이 가능하다.
  • 임베디드 타입을 포함한 모든 값 타입은 값 타입을 소유한 엔티티에 생명주기를 의존함

연관관계 매핑

  • @ManyToOne : 테이블 매핑 시 N:1임을 명시
  • @ManyToMany : 테이블 매핑 시 N:N임을 명시
  • @OneToMany : 테이블 매핑 시 1:N임을 명시

@JoinTable : 애노테이션은 M:N 관계에서 생성할 테이블 명을 정의하는 애노테이션

 

@JoinColumn : 외래키를 매핑할 때 사용한다. name 속성에는 매핑할 외래키 이름을 지정한다.