-
JPA 기본키 저장개발/java 2015. 12. 28. 17:171. IDENTITY 전략
@Entity public class Board { @Id @GeneratedValue(strategy GenerationType.IDENTITY) private Long id; }
엔티티가 영속상태가 되려면 식별자가 필요함.IDENTITY 전략은 데이터베이스에 저장한 후에 식별자값을 구할수 있으므로 em.persist() 를 호출함과 동시 INSERT SQL이 동작한다.
트랜잭션을 지원하는 쓰기 지연이 동작하지 않음.
2. SEQUENCE 전략
@Entity @SequenceGenerator ( name "BOARD_SEQ_GENERATOR", sequenceName " BOARD_SEQ", //매핑할 데이터베이스 시퀀스 이름 initialValue = 1, allocationSize = 1) public class Board { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "BOARD_SEQ_GENERATOR") private Long id; }
시퀀스전략은 IDENTITY 전략과 다르게 영속화 함과 동시에 INSERT 하지 않는다. (지연 가능)
단 데이터베이스를 통해 식별자를 조회하는 작업이 필요하다. 2번 통신해야한다.
JPA는 시퀀스에 접근하는 횟수를 줄이기 위해 allocationSize 를 사용하는데
50으로 설정해 두면 한번 호출할때 1~50 까지 메모리에서 식별자를 할당하고 51 이 되면 51~100까지를 메모리에서 식별자를 할당한다.
이 방법은 jvm 이 동시에 동작해도 키값이 충돌하지않는다.
3. 테이블 전략
@Entity @TableGenerator ( name = "BOARD_SEQ_GENERATOR" ’ table = "MY_SEQUENCES" ’ pkColumnValue = "BOARD_SEQ", allocationSize =1) public class Board { @Id @GeneratedValue (strategy = GenerationType.TABLE, generator = "BOARD_SEQ_GENERATOR") private Long id; }
하나의 시퀀스 테이블을 만들고, 구분값에 해당하는 부분이 pkColumnValue 에 해당하는 BOARD_SEQ 가 된다.
처음에 값이 없어도 JPA 가 INSERT 하면서 1을 넣어준다.'개발 > java' 카테고리의 다른 글
클라이언트 ip (외부ip 가져오기) (0) 2016.01.25 jstl escapeXml (0) 2016.01.19 JPA update 변경감지 (0) 2015.12.28 엔티티의 생명주기 (0) 2015.12.28 EntityManagerFactory와 EntityManager 의 사용 (0) 2015.12.28