티스토리 뷰

Spring

[Spring] JPA 엔티티 매핑

Gray__ 2022. 5. 9. 16:04

엔티티 매핑

  • 객체와 테이블 매핑: @Entity, @Table
  • 필드와 컬럼 매핑: @Column
  • 기본 키 매핑: @Id
  • 연관관계 매핑: @ManyToOne, @JoinColumn

 

 

객체와 테이블 매핑

@Entity가 붙은 클래스는 JPA가 관리하고 엔티티라고 합니다. JPA를 사용해서 테이블과 매핑할 클래스는 @Entity가 필수입니다. 기본 생성자도 public 이나 protected로 반드시 생성하고, final class, enum, interface, inner class에는 사용할 수 없습니다. @Table로 디비 테이블에 저장될 이름을 따로 설정할 수 있습니다.

@Entity
@Table(name = "ORDERS")
public class Order extends BaseEntity{
	@Id 
	private Long id;
}

필드와 컬럼 매핑

객체의 필드와 DB 테이블 매핑시 사용합니다. 필드와 컬럼을 매핑하는  몇 가지 속성이 있는데 알아보겠습니다.

 

@Column

- name: 필드와 매핑할 테이블의 컬럼 이름

- insertable, updatable: 컬럼을 수정했을 때 디비에 변경을 할지 말지 설정

- nullable: Not Null 제약 조건이 걸린다.

- unique: 컬럼 하나에 유니크 조건을 걸 때 사용. 잘 사용하지 않고 uniqueConstarint를 더 많이 사용

- length: 길이를 조절. String 타입에만 사용

 

 

@Enumerated

- enum 타입을 매핑할 때 사용. ORDINARY를 사용하면 안되고 STRING 사용 !

    - EnumType.ORDINARY를 사용하면 1, 2, 3과 같이 순서대로 저장되는데, 중간에 하나가 사라진다면...?

 

 

@Lob

- Lob: 데이터 베이스 BLOB, CLOB 타입과 매핑, 문자는 CLOB, 나머지는 BLOB

 

 

@Transient

- 메모리 상에서만 임시로 값을 보관하고 싶을 때 사용

- 필드 매핑 X, 디비 저장 조회 X

 

@Entity
@Table(name = "ORDERS")
public class Order extends BaseEntity{
    @Id @GeneratedValue
    @Column(name = "ORDER_ID")
    private Long id;
}

기본 키 매핑

기본 키를 매핑하는 어노테이션을 알아보겠습니다.

 

@Id

- 직접 아이디로 사용하겠다고 세팅해주는 것.

- PK 조건을 걸어준다고 생각하면 된다.

 

@GeneratedValue

- 자동으로 키를 생성하기 원할 때 사용하면 된다.

- 옵션으로 IDENTITY, SEQUENCE, TABLE, AUTO가 있는데 관계형 데이터베이스를 사용하는 경우 보통 SEQUENCE, AUTO를 많이 사용한다. 디폴트는 AUTO.

 

권장하는 식별자(PK) 전략

- 기본 키 제약 조건: NULL이 아니여야하고, 유일해야하고, 변하면 안된다 -> Not null, unique, immutable

- 미래까지 이 조건을 만족하는 키는 찾기 어렵기 때문에 대체키를 사용하는 것이 좋다.

- 비즈니스 환경은 언젠가 변한다고 생각.

- 예를 들어 주민등록번호도 기본 키로 적절하지 않다.

- 권장: Long Type + 대체키(sequence or UUID) + 키 생성전략 사용

    - auto increment나 sequence 전략 사용 -> Long 타입으로 사용하자.

 

@Entity
@Table(name = "ORDERS")
public class Order extends BaseEntity{
    @Id @GeneratedValue
    @Column(name = "ORDER_ID")
    private Long id;
}
댓글