728x90
SimpleJpaRepository : JPA 구현체
- Jpa의 내부 기능을 활용해서 CRUD 기능을 제공한다.
- Count와 같은 쿼리는 JPA에서 제공하는 것이 아니기 때문에 StringQuery를 가지고 있다.
- @Repository : 스프링 컴포넌트로 등록, JPA Exception을 SpringFramework에서 제공하는 Exception으로 변경한다
- @Transactional : 기본적으로 스프링 데이터 JPA는 트렌젝션을 걸고 시작한다.
- 트랜잭션을 SpringDataJpa가 제공해 주기떄문에 내 코드에 @Transactional이 없어도 동작한다.
- JPA의 모든 변경은 트랜잭션 안에서 동작
- 스프링 데이터 JPA는 변경(등록, 수정, 삭제) 메서드를 트랜잭션 처리
- 서비스 계층에서 트랜잭션을 시작하지 않으면 리파지토리에서 트랜잭션 시작
- 서비스 계층에서 트랜잭션을 시작하면 리파지토리는 해당 트랜잭션을 전파받아서 사용
- 그래서 SpringDataJPA를 사용할 때 트랜잭션이 없어도 데이터 등록, 변경이 가능했음(사실은 트랜잭션이 리포지토리 계층에 걸려있는 것임)
- @Transactional(readOnly = true)
- 데이터를 단순히 조회만 하고 변경하지 않는 트랜잭션에서 readOnly = true 옵션을 사용하면 flush를 생략해서 약간의 성능 향상을 얻을 수 있음
save() 메서드

- 새로운 엔티티면 저장( persist )
- 새로운 엔티티가 아니면 병합(merge)
- Merge 같은경우 준영 속상 태인 데이터를 영속 상태로 변경할 때 사용하지 업데이트할 때 사용하는 것이 아니다.(업데이트 같은 경우 변경 감지를 사용해라)
728x90
'실전! 스프링 데이터 JPA' 카테고리의 다른 글
| Ch06. 나머지 기능들 - Specifications (명세) (0) | 2021.12.28 |
|---|---|
| Ch05. 스프링 데이터 JPA 분석 - 새로운 엔티티를 구별하는 방법 (0) | 2021.12.28 |
| Ch04. 확장 기능 - Web 확장(도메인 클래스 컨버터, 페이징과 정렬) (0) | 2021.12.27 |
| Ch04. 확장 기능 - Auditing (0) | 2021.12.27 |
| Ch04. 확장 기능 - 사용자 정의 리포지토리 구현 (0) | 2021.12.27 |