오늘의하루

JPA 엔티티 매핑 본문

Spring/JPA

JPA 엔티티 매핑

오늘의하루_master 2024. 1. 2. 23:35

매핑의 소개

1. 객체와 테이블 매핑 : @Entity, @Table

2. 필드와 컬럼 매핑 : @Column

3. 기본 키 매핑 : @Id

4. 연관 관계 매핑 : @ManyToOne, @JoinColumn

 

@Entity

JPA가 관리할 수 있도록 지정해 주는 어노테이션이다.

  • JPA를 사용해서 테이블과 매핑할 클래스는 필수로 작성해줘야 한다.

주의 사항

1. JPA를 사용해서 테이블과 매핑할 클래스는 기본 생성자가 필수로 존재해야한다.

2. 필드에 final 클래스, interface, inner클래스는 사용하지 말아야한다.

3. 저장할 필드에 final 사용을 하면 안된다.

@Table

엔티티와 매핑할 테이블에 관련된 옵션을 지정할 수 있다.

1. name : 매핑할 테이블의 이름 지정 (기본값 : 클래스 명)

2. uniqueConstraints : DDL 생성 시 유니크 제약 조건 생성

 

DB 스키마 자동생성

Hibernate에서 제공하는 옵션 중 DDL 구문을 자동으로 생성해주는 것이 있다.

<property name="hibernate.hbm2ddl.auto" value="create" />

1. create : 기존 테이블 삭제 후 다시 생성 (DROP + CREATE)

2. craete-drop : create와 같지만 종료시점에 테이블을 DROP해준다. (TEST시 주로 사용)

3. update : 변경된 부분을 체크하여 반영한다.

4. validate : 엔티티와 실제 테이블이 정상적으로 매핑되어있는지만 확인한다.

5. none 또는 제거 : 사용하지 않는다.

 

주의 사항

로컬에서는 craete나 update를 사용해도 되지만 여럿이서 사용하거나 운영서버에서는 절대 사용해선 안된다.

hdm2ddl.auto를 이용해서 Table 생성하기

@Entity 
public class Member { 
     @Id 
     private Long id; 
     @Column(name = "name") 
     private String username; 
     private Integer age; 
     @Enumerated(EnumType.STRING) 
     private RoleType roleType; 
     @Temporal(TemporalType.TIMESTAMP) 
     private Date createdDate; 
     @Temporal(TemporalType.TIMESTAMP) 
     private Date lastModifiedDate; 
     @Lob 
     private String description; 
     //Getter, Setter… 
}

매핑 어노테이션 정리

1. @Column : 컬럼 매핑

2. @Temporal : 날짜 타입 매핑 (java 8 이후 생략 가능)

  • private LocalDateTime createDate;

3. @Enumerated : enum 타입 매핑

4. @Lob : 문자는 CLOB, 그외 BLOB

5. @Transient : 특정 필드를 컬럼에 매핑하지 않겠다.

  • 주로 메모리상에서만 임시로 어떤 값을 보관하고 싶을때 사용된다.

@Column의 속성

1. name : 필드와 매핑할 테이블의 컬럼 이름 (생략시 필드명)

2. insertable, updatable : 등록, 변경 가능 여부 (기본값 true)

3. nullable : null 허용 관련 (false : not null)

4. unique : 유니크 제약조건 여부 (사용 x)

  • 유니크 제약조건이 잘 만들어지지만 이름이 랜덤으로 지정되기 때문에 사용을 권장하지 않는다.
  • 대신 @Table 어노테이션의 속성 중 하나인 uniqueConstraints을 사용한다.

6. length : 문자 길이 제약 조건 (String 타입만 사용 가능)

@ Temporal

java 8 버전 이상부터는 생략이 가능한 옵션이다.

1. TemporalType.DATE : 날짜 (2024-01-02)  == LocalDate

2. TemporalType.TIME : 시간 (23:29:46)

3. TemporalType.TIMESTAMP : 날짜 + 시간 (2024-01-02 23:29:46) == LocalDateTime

@Enumerated

java의 enum 타입을 매핑할때 사용한다.

옵션이 2개가 있지만 가급적 String을 사용하는 것을 권장한다.

1. EnumType.ORDINAL : 순서를 DB에 저장한다. (권장 X)

  • 이유는 만약 enum을 수정하다가 순서가 달라진다면 기존 저장된 데이터와 혼동될 수 있기 때문이다.

2. EnumType.STRING : 이름을 DB에 저장한다. (권장 O)

'Spring > JPA' 카테고리의 다른 글

JPA 연관 관계 매핑 - start  (1) 2024.01.14
JPA 기본키 매핑  (1) 2024.01.12
JPA에서 batch_size를 지정하는 이유는?  (0) 2024.01.02
JPA의 영속성 관리  (0) 2023.12.31
JPA의 의미 및 기본 사용 방법  (1) 2023.12.31
Comments