Backend

JPA 4장

niahh 2025. 5. 26. 14:19

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