JPA @GeneratedValue()

KMS·2022년 4월 4일
0

JPA Basics

목록 보기
4/20
post-thumbnail
@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;
    }
}

1. @GeneratedValue(strategy=GenerationType.IDENTITY)

MySQL에서 Auto_Increment와 동일. 주로 MySQL, PostgreSQL, SQL Server, DB2에서 사용.

2. @GeneratedValue(strategy=GenerationType.SEQUENCE)

유일한 값을 순서대로 생성하는 특별한 데이터베이스 오브젝트. 오라클, 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를 접근하는 횟수를 줄일 수 있습니다. 제대로 사용하면 성능 최적화에 좋지만, 잘못 사용하면 오히려 성능 저하가 생길 수 있습니다.

profile
Student at Sejong University Department of Software

0개의 댓글