To Dare Is To Do!
11.29 매일 메일 본문
JPA에서 ID 생성 전략에 대해 설명해주세요.
JPA에서 ID를 생성하기 위해서는 직접 할당과 자동 할당을 사용할 수 있다.
직접 할당 : @Id어노테이션만을 사용하여 Id값을 직접 할당하는 방식
자동 할당 : @Id와 @GeneratedValue를 함께 사용해서 원하는 키 생성 전략을 선택하는 방식
@GeneratedValue의 stretagy 옵션을 통해 생성 전략을 설정 가능
AUTO :
데이터베이스 방언에 따라서 IDENTITY, SEQUENCE, TABLE 중 하나를 자동으로 선택
IDENTITY :
기본 키 생성을 DB에 위임하는 전략
SEQUENCE :
시퀀스* 키 생성 전략을 지원하는 DB에서 사용 가능
auto_increment와 달리 초기 값과 한번에 증가할 크기를 설정 가능
데이터베이스 시퀀스 : 유일한 값을 자동으로 생성하게 하는 객체로 새로운 값이 들어오면 하나씩 배분
TABLE :
키 생성 전용 테이블을 만들어 시퀀스를 흉내내는 전략
https://www.maeil-mail.kr/question/69
매일메일 - 기술 면접 질문 구독 서비스
기술 면접 질문을 매일매일 메일로 보내드릴게요!
www.maeil-mail.kr
Spring Data JPA에서 새로운 Entity인지 판단하는 방법은 무엇일까요?
새로운 Entity인지 여부는
다른 설정이 없으면
JpaEntityInformation의 구현체 중 JpaMetamodelEntityInformation 클래스의 isNew(T entity)에 의해 판단된다.
@Version이 사용된 필드가 없거나 @Version이 사용된 필드가 원시 타입일 경우
AbstractEntityInformation의 isNew()를 호출한다.
@Version이 사용된 필드가 wrapper class이면
null여부를 확인한다.
직접 ID를 할당하는 경우에는 어떻게 동작하나요?
키 생성 전략을 사용하지 않고 직접 ID를 할당하는 경우 새로운 entity로 간주되지 않는다.
=> JpaPersistableEntityInformation의 isNew()가 동작하도록 해야 한다.
새로운 Entity인지 판단하는게 왜 중요할까요?
SimpleJpaRepository의 save() 메서드에서 isNew()를 사용하여 persist를 수행할지 merge를 수행할지 결정해야 한다.
만약 ID를 직접 지정해주는 경우에는 신규 entity라고 판단하지 않기 때문에 merge를 수행합니다.
이때 해당 entity는 신규임에도 불구하고 DB를 조회하기 때문에 비효율적입니다.
따라서, 새로운 entity인지 판단하는 것은 중요한 부분입니다.
https://www.maeil-mail.kr/question/27