
@Entity
@Table(name = "hotel_info")
public class Hotel {
@Id
@Column(name = "hotel_id")
private String id;
...
protected Hotel() {}
public Hotel(String id, String name, int year, Grade grade) {
this.id = id;
this.name = name;
}
저장하기 전에 생성자를 할당 (생성 시점에 전달)
위 코드에서 hotel 엔티티를 생성하는 시점에 id를 식별자로 전달!
Hotel hotel = new Hotel("H-001", ...); // 생성할 때 식별자를 전달!
entityManager.persist(hotel);
[ 설정 방식 ]
INSERT 쿼리를 실행해야 식별자를 알 수 있음!
- EntityManager#persist() 호출 시점에 INSERT 쿼리 실행!
- persist() 실행할 때 객체에 식별자 값 할당!


[ 설정 방식 ]
EntityManager#persist() 호출 시점에 시퀀스 사용
- persist() 실행할 때 객체에 식별자 값 할당!
- INSERT 쿼리 실행안함


SequenceGenerator 속성
name : GeneratedValue에서 사용할 이름 지정
sequnceName : 시퀀스 이름
schema : 스키마 이름
allocationSize : (여기선 설명 안함) 무조건 1로 설정
[ 설정 방식 ]
EntityManager#persist() 호출 시점에 테이블 사용
- persist() 실행할 때 테이블을 통해 식별자 구하고, 이를 엔티티에 할당!
- INSERT 쿼리 실행안함

[ 식별자 생성시 사용할 테이블의 구조 ]

TableGenerator 설정의 속성
- table : 식별자 생성시 사용할 테이블 이름 설정
- pkColumname : 엔티티 이름을 보관할 컬럼
- pkColumnValue : 엔티티 이름
- valueColumnName : 다음 식별자를 구할때 사용할 컬럼
- initialValue = 0 : 다음 식별자가 1부터 시작 (?)
- allocationSize = 1 : 무조건 1로 설정 (다중 노드 환경에서 키가 중복될 수도 있음)