@Entity
@SequenceGenerator(name = "member_auto_generator",
sequenceName = "member_auto",
initialValue = 2, allocationSize = 15
) // initialValue => 처음 값을 저장해 줄때, 2부터 시작해서 저장해줌, allocationSize => 해당 값의 횟수마다 DB를 참조해서 sequence 값을 가져옴
public class MemberAuto {
@Id
// @GeneratedValue(strategy = GenerationType.IDENTITY) //== MySQL AUTO_INCREMENT
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "member_auto_generator")
private Long id;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
}
MySQL에서 Auto_Increment와 동일. 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용.
유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트. 오라클, PostgreSQL, DB2, H2 데이터베이스에서 사용. 해당 strategy를 사용하면, sequence_name의 이름으로 DB에 새로운 테이블 생성 및 next_val column에 시퀀스 값을 저장합니다.
@SequenceGenerator()를 통해 해당 column의 시작 값(initialValue)와 allocationSize를 설정해줌.
ex)
initialValue=2 -> 값을 2부터 저장 시작
allocationSize=15 -> 시퀀스를 가져올때 마다 15씩 증가 된 값(시퀀스 값)을 받아옵니다. 현재 값부터 시퀀스 값까지를 메모리에 할당 해줍니다. 그러므로, 시작 값이 1일때, 처음에는 1~15까지를 메모리에 할당합니다. 1~15까지 저장하기 위해서 DB를 접근하는 횟수가 1번이면 됩니다. 즉, DB를 접근하는 횟수를 줄일 수 있습니다. 제대로 사용하면 성능 최적화에 좋지만, 잘못 사용하면 오히려 성능 저하가 생길 수 있습니다.