과정을 즐기자

엔티티 매핑 본문

Spring Data

엔티티 매핑

320Hwany 2022. 11. 29. 21:43

객체와 테이블 매핑

  1. @Entity

@Entity가 붙은 클래스는 JPA가 관리하는 것으로 엔티티라고 부른다. @Entity의 속성에는 name이 있다.
name은 JPA에서 사용할 엔티티 이름을 지정한다. 설정하지 않으면 클래스 이름을 그대로 사용한다.
JPA가 내부에서 동적으로 객체를 생성하기 때문에 기본 생성자가 필요하다.

@NoArgsConstructor(access = AccessLevel.PROTECTED)
@Entity
public class Member{...}
  1. @Table

@Table은 엔티티와 매핑할 테이블을 지정한다. @Table의 속성에는 name, catalog, schema, uniqueConstraints 등이 있다.
name은 매핑할 테이블 이름을 지정하고 설정하지 않으면 엔티티 이름을 사용한다.

@Table(name = "MY_MEMBER")
public class Member {...}

필드와 컬럼 매핑

  1. @Column

@Column은 객체 필드를 테이블 컬럼에 매핑한다. 주요 속성에는 name, nullable, unique 등이 있다.
name은 필드와 매핑할 테이블의 컬럼이름이고 기본 값은 객체 필드 이름을 사용한다.
nullable은 null 값의 허용 여부를 결정한다. 기본 값은 true이다.
unique는 해당 컬럼에 동일한 값이 들어가지 않도록 설정할 수 있다.

@Column(nullable = false, unique = true)
private String username;
  1. @Enumerated

@Enumerated는 자바의 enum 타입을 매핑할 때 사용한다. 속성에는 value가 있는데 기본 값은 EnumType.ORDINAL이다.
이것은 enum 순서를 데이터 베이스에 저장하는 것이다. Grade라는 enum 타입에 VIP, BASIC이 있다면 각각 0,1이 되는 것이다.
하지만 여기서 VVIP가 추가되어서 VVIP, VIP, BASIC이 된다면 기존에 데이터 베이스에 저장해놓은 데이터와 맞지 않아 문제가 발생한다.
EnumType.STRING은 enum이름 그대로 문자로 데이터 베이스에 저장되기 때문에 VVIP가 추가되어도 안전하다.

@Enumerated(EnumType.STRING)
private Grade grade;
  1. @Lob

LOB은 Text, 그래픽, 이미지, 비디오, 사운드 등 구조화되지 않은 대형 데이터를 저장하는데 사용한다.
데이터 베이스에 BLOB, CLOB 타입과 매핑한다. @Lob에는 지정할 수 있는 속성이 없고 매핑하는 필드 타입이 문자면
CLOB으로 매핑하고 나머지는 BLOB으로 매핑한다.

@Lob
private String contents;
  1. @Transient

@Transient는 매핑하지 않으려는 필드에 붙인다. 데이터 베이스에 저장하지 않고 조회도 하지 않는다.
객체에 임시로 보관하고 싶을 때 사용한다.

@Transient
private Integer temp;

기본 키 매핑

기본 키 매핑에는 직접 할당하는 방식과 자동 생성해주는 방식이 있다.
직접 할당하는 방식은 em.persist()로 엔티티를 저장하기 전에 애플리케이션에서 기본키를 직접 할당하는 방식이다.
이제부터 자동 생성 해주는 3가지 방식에 대해서 알아보자.

  1. IDENTITY 전략

IDENTITY는 기본 키 생성을 데이터베이스에 위임하는 방식이다. 이 전략은 em.persist()를 호출하는 즉시
INSERT SQL이 데이터베이스에 전달된다. 따라서 이 전략은 트랜잭션을 지원하는 쓰기 지연이 동작하지 않는다.
주로 MySQL, PostgreSQL에서 사용한다.

@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
  1. SEQUENCE 전략

데이터 베이스 시퀀스는 유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트다.
데이터 베이스 시퀀스에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장한다.
주로 오라클, PostgreSQL에서 사용한다.

  1. TABLE 전략

키 생성 전용 테이블을 하나 만들어서 데이터 베이스 시퀀스를 흉내내는 전략이다.

식별자 선택 전략

데이터베이스의 기본 키는 null값이면 안되고 유일해야 하며 변해서는 안된다.
이를 만족하는 기본 키를 선택할 때 자연 키, 대리 키를 사용할 수 있다.
자연 키는 비즈니스와 관련이 있는 키고 대리 키는 비즈니스와 관련이 없는 키이다.
대리 키는 대체 키라고도 하며 오라클 시퀀스, auto_increment, 키 생성 테이블을 사용하여 만든 키이다.

비즈니스 환경은 언젠가는 변하므로 변하지 않아야 한다는 기본 키의 원칙에 따라 대리 키를 사용하여 만들어야 한다.

출처 : 자바 ORM 표준 JPA 프로그래밍(김영한)

'Spring Data' 카테고리의 다른 글

고급 매핑  (0) 2022.12.04
다양한 연관관계 매핑  (0) 2022.12.02
연관관계 매핑  (0) 2022.11.29
영속성 관리  (0) 2022.11.27
JPA를 사용하는 이유  (0) 2022.11.27