사용자 도구

사이트 도구


java:jpa:springdatajpa

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
java:jpa:springdatajpa [2023/07/10 15:06]
kwon37xi [Pageable 사용 금지]
java:jpa:springdatajpa [2024/02/07 14:43] (현재)
kwon37xi [Repository 구현]
줄 34: 줄 34:
 } }
 </code> </code>
 +
 +===== 모든 Repository 에는 @Transactional 붙이기 =====
 +  * Spring Data JPA 뿐만 아니라 모든 Repository 에는 명시적으로 ''@Transactional''을 붙여야 한다.
 +  * 그렇지 않으면 Repository 에 추가된 메소드에는 트랜잭션이 걸리지 않는다.
 +  * 트랜잭션 없이 DB 작업이 수행되면 다양한 문제를 겪을 수 있다.
 +    * 특히 JDBC DataSource 에서 ''autocommit=false''가 기본으로 하고 작업시마다 ''autocommit=false|true'' 토글을 하지 않고 ''hibernate.connection.provider_disables_autocommit: true'' 인 경우에 문제가 된다.
 +    * Spring 은 JPA EntityManager 의 경우 DB 관련 작업이 시작되면 EM 을 생성하고 커밋/롤백시에 정리작업을 하는데, EM을 생성하는 것은 트랜잭션이 없어도 생성한다. 따라서 커밋/롤백이 없으면 정리가 안되어 EntityManager 가 계속 남아서 존재하는 현상이 발생하고 이는 일종의 leak 이며, DB쪽에서 커넥션을 끊을 경우 EM에서 오류가 발생하는 현상이 생긴다.
 +
 +<note warning>
 +모든 Repository 에는 ''@Transactional''을 붙여야한다.
 +</note>
  
 ===== Repository 상속 금지 ===== ===== Repository 상속 금지 =====
java/jpa/springdatajpa.txt · 마지막으로 수정됨: 2024/02/07 14:43 저자 kwon37xi