spring-data-jpa 5

JpaRepository를 custom해서 사용하는 방법

본 포스팅에서 제공하는 방법은 Java의 정식 문법을 따르지 않고, spring-data-jpa에서 제공하는 방법을 다루고 있습니다. 본문에 앞서 주의 사항이 먼저 있습니다. 비즈니스의 핵심 로직을 다루는 리포지토리와 화면에 맞춘 정적 쿼리를 조회하는 리포지토리는 분리해야합니다. custom repository의 기능 사용해서 하나의 entity에 대해 하나의 repository만 사용하게 되면, 어떤 경우에 어떤 메서드를 사용해야하는지 파악하기 어렵게 됩니다. 그리고 비즈니스 핵심로직과 화면에 맞춘 쿼리는 변경주기가 다르다는 점도 고려해야합니다. 먼저 커스텀 메서드가 필요한 인터페이스를 생성합니다. 이를 구현한 클래스를 생성합니다. 이 때 클래스 이름의 postfix는 반드시 Impl이어야 합니다. p..

DEV/Spring Data JPA 2023.09.24

Update 쿼리를 호출할 때 주의사항 2가지

일반적으로는 Entity에 대한 수정사항은 변경감지를 통해서 진행됩니다. 하지만 여러 Entity에 대해서 update를 한 번에 처리해야하는 경우도 있습니다. @Repository public interface MemberJpaRepository extends JpaRepository { int addTokens(@Param("name") String name, @Param("amount") Integer amount); } select 쿼리와 달리 update 쿼리는 2가지를 신경써야 합니다. 1. @Modifying annotation을 추가해주어야 합니다. 2. Update 쿼리는 DB에 직접 호출됩니다. @Modifying가 없으면 테스트 코드 작성과정에서 검증될 가능성이 높기 때문에 큰 문제가..

DEV/Spring Data JPA 2023.09.24

메서드 이름으로 데이터 조회하기 vs JPQL 직접 작성해서 데이터 조회하기

@Repository public interface MemberJpaRepository extends JpaRepository { List findByNameAndEmail(String name, String email); @Query("select m from Member m where m.name = :name and m.email = :email") List findUser(@Param("name") String name, @Param("email") String email); } findByNameAndEmail은 JpaRepository를 extends한 인터페이스에서 메서드 이름으로 데이터를 조회할 조건을 지정하는 방식입니다. 이 방법은 내부적으로 JPQL을 생성해주는 Spring Data J..

DEV/Spring Data JPA 2023.09.24