JpaRepository를 상속 받은 인터페이스를 작성 할 때, 기본 제공 메소드만 쓰는 경우는 별로 없다고 생각한다.
필요로하는 커스텀 메소드가 필요하다. 이때 간과해서는 안될 아주 중요한 부분이 있다..!!!
기본적으로 JpaRepository 인터페이스에는 @Transactional
이 달려있다.
따라서 해당 메소드를 거친 엔티티는 계속 영속성 상태이다.
하지만, 우리가 임의로 정의해준 메소드에는 @Transactional이 적용되지않는다.
따라서 정의한 메소드에도 Transactional이 정의되도록 꼭 어노테이션을 붙여줘야한다.
그렇지 않았다가는 나중에 어마어마한 시한폭탄이 될것이다..
//select 만 하는 경우 readOnly 옵션을 줌으로써 조금이나마 성능향상을 꾀할 수 있음
@Transactional(readOnly = true)
public interface AccountRepository extends JpaRepository<Account, Long> {
boolean existsByEmail(String email);
boolean existsByNickname(String nickname);
Account findByEmail(String email);
Account findByNickname(String nickname);
}
'JPA' 카테고리의 다른 글
[JPA] Error creating bean with name 'entityManagerFactory' defined in class path resource 에러 해결 (0) | 2020.08.05 |
---|---|
[JPA] update가 왜 안되는거지..? (detached to persistent) (0) | 2020.07.21 |
[JPA] 이메일 인증 토큰 값이 Null ?? (EntityLifeCycle, Transactional) (0) | 2020.07.14 |
[JPA] spring data jpa Page vs Slice (0) | 2020.06.29 |
[JPA] 변경 감지(dirty checking)와 병합(merge) (0) | 2020.05.02 |
댓글