Spring Data JPA에서 새로운 Entity인지 판단하는 방법은 무엇일까요?

2024. 11. 29. 09:19·백엔드 면접

새로운 엔티티인지 여부는 일반적인 경우 JpaEntityInformation 인터페이스의 구현체인 JpaMetamodelEntityInformation 클래스가 동작합니다. 이 클래스의 isNew(T entity) 에 의해 판단됩니다.

 

JpaMetamodelEntityInformation - isNew(T entity)

 

@Version이 사용된 필드가 없거나 @Version이 사용된 필드가 primitive 타입이면 AbstractEntityInformation의 isNew(T entity)를 호출해 값이 0인지를 확인합니다. @Version이 사용된 필드가 래퍼 클래스면 null 여부를 확인합니다.

 

AbstractEntityInformation - isNew(T entity)

 

@Version이 사용된 필드가 없어서 AbstractEntityInformation 클래스가 동작하면 @Id 어노테이션을 사용한 필드를 확인해서 primitive 타입이 아니라면 null 여부, Number의 하위 타입이면 0인지 여부를 확인합니다. @GeneratedValue 어노테이션으로 키 생성 전략을 사용하면 데이터베이스에 저장될 때 id가 할당됩니다. 따라서 데이터베이스에 저장되기 전에 메모리에서 생성된 객체는 id가 비어있기 때문에 isNew()는 true가 되어 새로운 엔티티로 판단합니다.

 


 

직접 ID를 할당하는 경우에는 어떻게 동작하나요?

키 생성 전략을 사용하지 않고 직접 ID를 할당하는 경우에는 새로운 엔티티로 간주되지 않아 merge가 호출됩니다. 이 때는 엔티티에서 Persistable<T> 인터페이스를 구현해서 JpaMetamodelEntityInformation 클래스가 아닌 JpaPersistableEntityInformation의 isNew()가 동작하도록 해야 합니다.

Persistable

 

 


 

새로운 엔티티인지 판별하는 게 왜 중요할까요?

 

SimpleJpaRepository의 save() 메서드에서 isNew()를 사용하여 persist를 수행할지 merge를 수행할지 결정합니다. 만약 ID를 직접 지정해주는 경우에는 신규 엔티티라고 판단하지 않기 때문에 merge를 수행합니다. 이때 해당 엔티티는 신규임에도 불구하고 DB를 조회하기 때문에 비효율적입니다. 따라서, 새로운 엔티티인지 판단하는 것은 중요한 부분입니다.

 

SimpleJpaRepository - save(S entity)

 

'백엔드 면접' 카테고리의 다른 글

엔티티 매니저에 대해 설명해 주세요.  (0) 2024.11.30
JPA의 ddl-auto 옵션에 대해서 설명해 주세요.  (0) 2024.11.29
@Value 어노테이션 사용 시 주의할 점을 설명해 주세요.  (0) 2024.11.28
RAID 기술에 대해서 설명해주세요.  (0) 2024.11.28
OSIV 옵션에 대해서 설명해주세요.  (0) 2024.11.27
'백엔드 면접' 카테고리의 다른 글
  • 엔티티 매니저에 대해 설명해 주세요.
  • JPA의 ddl-auto 옵션에 대해서 설명해 주세요.
  • @Value 어노테이션 사용 시 주의할 점을 설명해 주세요.
  • RAID 기술에 대해서 설명해주세요.
이런개발
이런개발
geun-00의 흔적 보관소
  • 이런개발
    내일이 기대되는 오늘
    이런개발
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 백엔드 면접
      • SQL N
        • SUM, MAX, MIN
        • SELECT
        • GROUP BY
        • JOIN
      • Spring
      • JPA
      • 트러블슈팅
      • Infra
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    raid
    토스 페이먼츠
    JPA
    오블완
    스프링
    백엔드 면접
    티스토리챌린지
    데브코스
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
이런개발
Spring Data JPA에서 새로운 Entity인지 판단하는 방법은 무엇일까요?
상단으로

티스토리툴바