보통 AUTO 로 설정하는데, 공부도 할겸 정리해본다.
GenerateValue의 전략은 3가지가 있다.
1. IDENTITY
2. SEQUENCE
3. TABLE
1. IDENTITY
기본키를 생성하는 작업을 전적으로 데이터베이스에 위임하는 것이다. 즉 데이터베이스와 동일시 하는 것.
이러한 특징때문에 persist 명령후에 엔티티의 pk를 바로 알수가 없다. 왜냐하면 데이터베이스에 한번 갔다 와야 pk를 알 수 있기 때문이다.
그래서 persist를 하면 바로 insert쿼리가 전송된다. 원래는 flush작업으로 그동안 쌓여있던 sql 쿼리들이 전송되면서 동기화가 된다.
IDENTITY전략에서만 유일하게 persist 작업과 동시에 쿼리를 날린다.
2. SEQUENCE
persist 하면 데이터베이스에서 시퀀스오브젝트의 pk값을 가져와서 바로 세팅해준다. insert 쿼리는 필요없다. 매번 persist 할때마다
네트워크를 타고 디비에갔다와야하는가?? 이런 문제를 해결하기 위해 시퀀스 번호를 한번에 가져오는데 이를 조절하는 것이
"allocationSize" 이다. 이를 조절하면 매번 왔다갔다하는 것이 아니라 한번에 사이즈만큼 pk를 가져온다.
3. TABLE
테이블 전략은 데이터베이스에 키생성만 하는 테이블을 하나 따로 만들어서 키를 생성하는 것이다 이는 성능상의 문제가 많다.
'JPA' 카테고리의 다른 글
[JPA] @MappedSuperClass 란? (0) | 2020.08.06 |
---|---|
[JPA] @ManyToOne , @OneToMany, @JoinColumn (0) | 2020.08.06 |
[JPA] 엔티티 업데이트 (0) | 2020.08.06 |
[JPA] EntityManager 명령어 정리 (0) | 2020.08.06 |
[JPA] 영속성과 영속성 컨텍스트 (0) | 2020.08.06 |
댓글