JPA
[JPA] Repository 인터페이스 작성시 유의사항
코리늬
2020. 7. 21. 23:46
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);
}