Spring Data Jpa 스프링 데이터 JPA 구현체 분석

신재원·2023년 3월 7일
0

Spring Data Jpa

목록 보기
11/13

🐱‍🏍 스프링 데이터 JPA 구현체 분석

  • JpaRepository --> SimpleJpaRepository

👀 !! 매우 중요

  • save() 메서드
    • 새로운 엔티티면 저장 (persist())
    • 새로운 엔티티가 아니면 병합 (merge()) "DB에서 한번 SELECT를 한다" (치명적 단점)

📍 @Transactional : 트랜잭션 적용

  • JPA의 모든 변경은 트랜잭션 안에서 동작
  • 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리
  • 서비스 계층에서 트랜잭션을 시작하지 않으면 Repository에서 트랜잭션 시작
  • 서비스 계층에서 트랜잭션을 시작하면 Repository는 해당 트랜잭션을 전파 받아서 사용
  • 그래서 스프링 데이터 JPA를 사용할 때 트랜잭션이 없어도 데이터 등록, 변경이 가능 했다. ( "트랜잭션이 Repository 계층에 걸려있는것임")

📍 @Transactional(readOnly = true)

  • 데이터를 단순히 조회만하고 변경하지 않는 트랜잭션일때 사용하면 성능이 향상된다.

🐱‍🏍새로운 엔티티를 구별하는 방법

  • 새로운 엔티티를 판단하는 기본 전략
    • 식별자가 객체일 때 null로 판단
    • 식별자가 자바 기본 타입일 때 '0'으로 판단
    • Persistable 인터페이스를 구현해서 판단 로직 변경가능

Persistable 인터페이스를 사용해서 새로운 엔티티 확인 여부를 직접 구현하는게 효과적이다.
✔ 참고로 등록시간 (@CreatedDate)을 조합해서 사용하면 이 필드로 새로운 엔티티 여부를 편리하게 확인할수 있다.
(@CreatedDate에 값이 없으면 새로운 엔티티로 판단함으로)

0개의 댓글