본문 바로가기

Spring&IntelliJ

JPA. Table를 이용한 기본키 생성전략

출처: https://www.youtube.com/watch?v=C7Uu_hFnQN8&list=PLOSNUO27qFbvzGd3yWbHISxHctPRKkctO&index=12

 

 

 

"왜 @Table(name="customer_tb") 와 @TableGenerator의 속성인 table="customer_id" 의 이름이 다른거지? 같은 테이블 이어야 하는데 왜 대상이 다른것인가?" 라는 의문에 대한 답. 즉 기본키 생성을 위한 별도의 테이블 이름이 customer_id이고 DB에 있는 그 기본적인 테이블의 이름이 customer_tb임.

 

복습. 이전에 보았던 @GeneratedValue(strategy = GenerationType.IDENTITY)

기본키 생성 테이블을 만들면 거기서 pk가 될 id를 가지고 와서 우리가 만들고자하는 DB의 레코드 데이터는 객체정보+기본키 생성 테이블에서 가져온 pk로 구성되게 됨.

아래와 같이 코드를 구성하면 내가 예상했던 대로 그 아래와 같이 쿼리문이 나가는 것을 볼수 있다.

내가 어떠한 값을 persist(insert)해주지도 않았는데 insert가 일어나는 것을 알고 있다. 따라서 내가 pk를 1부터 사용하고 싶다면 위와 같이 initialValue를 0으로 해주고 시작하면 된다.

위와같이 기본키를 위한 테이블과 기본 테이블이 생성된 후에

기본키로 사용할 id를 가져옴(select). 가져오는 것에서 끝나지 않고 다음 키값을 미리 지정 해주기 위해서 기본키 값의 update(set next_value=?)가 일어남.next_value는 valueColumn의 이름임(valueColumnName)

(pkColumnName=id_name,  valueColumnName=next_value)

 

 

이상으로 JPA에서 기본키를 생성하는 3가지 방법을 살펴보았습니다. (1. Identity를이용한 기본키 생성, Sequence이용한 기본키 생성(@SequenceGenerator), Table을 이용한 기본키 생성(@TableGenerator))(복습해 보자면 @GeneratedValue어노테이션을 사용한다는 것은 직접 기본키를 생성하는 것이 아닌 DB에서 생성하는 기본키를 사용한다는 의미임).

 

더 중요한 것은 기본키를 생성하는데에 있어 이러한 방식(

)이 있다 정도로 알아 두는 것임.