본문 바로가기
JPA

[JPA] Repository 인터페이스 작성시 유의사항

by 코리늬 2020. 7. 21.

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);
}

댓글