JPA 4장
4.1. @Entity
4.2. @Table
4.3. 다양한 매핑 사용
4.4. 데이터베이스 스키마 자동 생성
4.5. DDL 생성 기능
4.6. 기본 키 매핑
4.6.1. 기본 키 직접 할당 전략
4.6.2. IDENTITY 전략
4.6.3. SEQUENCE 전략
4.6.4. TABLE 전략
4.6.5. AUTO 전략
4.6.6. 기본 키 매핑 정리
4.7. 필드와 컬럼 매핑 : 레퍼런스
4.7.1. @Column
4.7.2 @Enumerated
4.7.3. @Temporal
4.7.4. @Lob
4.7.5. @Transient
4.7.6. @Access
4.8. 정리
4.1. @Entity
테이블과 매핑할 클래스는 필수로 붙여야 한다. 그 클래스는 JPA가 관리하는 것이고 엔티티라 부른다. 기본 생성자를 필수로 만들어야 한다. Final 클래스, 이넘 인터페이스 , 이너 클래스에는 사용할 수 없다. 저장할 필드에 파이널을 사용하면 안된다.
4.2. @Table
엔티티와 매핑할 테이블을 지정할때 사용한다.
4.3. 다양한 매핑 사용
요구사항이 추가된 코드를 분석해보자.
roleType: 자바의 이넘을 사용해 회워의 타입을 구분한다. 일반 회원은 USER, 관리자는 ADMIN이다. 자바의 이넘을 사용하려면 @Enumerated 어노테이셔으로 매핑한다.
createdDate, lastModifiedDate: 자바의 날짜 타입은 @Temporal를 사용해서 매핑한다.
Description: 회원을 설명하는 필드 값이다. 따라서 CLOB 타입으로 저장해야한다. @Lob으로 CLOB이나 BLOB 타입을 매핑할 수 있다.
4.4. 데이터베이스 스키마 자동 생성
JPA는 매핑정보와 데이터 베이스 방언을 사용해서 디비 스키마를 생성한다.
persistem.xml 에 다음을 ㅅ추가하면 애플리케이션 실행 시점에 디비 테이블을 자동으로 생성한다.
개발자가 직접 테이블 생성하는 수고를 덜 수 있다.
하지만 이 기능은 완벽하지 않으므로 참고하는 정도로만 사용하는 것이 좋다.
4.5. DDL 생성 기능
회원 이름은 필수로 입력되어야 하고, 10자를 초과하면 안된다는 제약조건이 추가되었다.
@Column(name = “NAME”, nullable = false, length = 10) // 추가
Nullable false로 not null 제약 조건으ㄹ 추가할 수 있다.
유니크 제약조건>
@Table (name = “MEMBER”, uniqueConstraints = { @UniqueConstraint ….}
이런 기능 들은 DDL 자동 생성때만 사용되고 JPA 실행 로직에는 영향 주지 않는다.
4.6. 기본 키 매핑
지금까지는 @Id 만 사용해서 회원의 기본키를 애플리케이션에서 직접 할당했다. 대신, 디비가 생성해주는 값을 사용하려면 어떻게 해야 할까?
JPA 가 제공하는 디비 기본 키 생성 전략
- 직접 할당
- 자동 생성: IDENTITY, SEQUENCE, TABLE
기본 키를 직접 할당하려면 @Id만 사용하고, 자동 생성 전략을 사용하려면 @Id에 @GeneratedValue를 추가하고 키 생성 전략을 선택하면 된다.
4.6.1. 기본 키 직접 할당 전략
4.6.2. IDENTITY 전략
이 전략은 기본 키 생성을 디비에 위ㅜ임하는 전략이다.
@GeneratedValue (strategy = GenerationType.IDENTITY)
4.6.3. SEQUENCE 전략
디비 시퀀스는 유일한 값을 순서대로 생성하는 특별한 디비 오브젝트다. 오라클, postgreSQL, DB2, H2 디비에서 사용할 수 있다.
4.6.4. Table 전략
TABLE 전략은 키 생성 전용 테이블을 만들고, 이름과 값으로 사용할 컬럼을 만들어 디비 시퀀스를 흉내내는 전략이다. 모든 디비에 적용할 수 있다.
4.6.5. AUTO 전략
선택한 디비 방언에 따라 IDENTITY, SEQUENCE, TABLE 전략 중 하나를 자동으로 선택한다.
장점은 디비를 변경해도 코드를 수정할 필요가 없다는 것이다.
4.6.6. 기본 키 매핑 정리
직접 할당:
SEQUENCE: 디비 시퀀스에서 식별자 값을 획득한 후 영속성 컨텍스트에 저장
TABLE: 디비 시퀀스 생성용 테이블에서 식별자 값을 획득한 후, 영컨에 저장
IDENTITY: 디비 에니티를 저장하여 식별자 값을 획득한 후 영컨에 저장한다.
4.7. 필드와 컬럼 매핑 : 레퍼런스
@Column, @Enumerated, @Temporal @Lob @Transient, @Access