복붙노트

[SPRING] Spring 데이터 JPA : query ManyToMany

SPRING

Spring 데이터 JPA : query ManyToMany

엔티티 사용자 및 테스트가 있습니다.

@Entity
public class User {
    private Long id;
    private String userName;
}

@Entity
public class Test {
    private Long id;

    @ManyToMany
    private Set<User> users;
}

사용자 엔티티가 모든 테스트를 수행 할 수 있습니다.

public interface TestRepository extends JpaRepository<EventSettings, Long> {
    List<Test> findAllByUsers(User user);
}

하지만 userName에 의해 모든 테스트를 찾는 데 사용할 수있는 쿼리는 무엇입니까?

해결법

  1. ==============================

    1.다음 메소드 서명을 통해 원하는 결과를 얻을 수 있습니다.

    다음 메소드 서명을 통해 원하는 결과를 얻을 수 있습니다.

    List<Test> findByUsers_UserName(String userName)
    

    이것은 Spring Data JPA의 속성 표현식 기능을 사용하고 있습니다. 서명 Users_UserName은 JPQL x.users.userName으로 변환됩니다. 이것은 주어진 사용자 이름에 대한 정확한 일치를 수행합니다.

  2. ==============================

    2.다른 답변은 함수 명명 기법을 사용하여 원하는 기능을 달성하는 방법을 보여줍니다. 다음과 같이 @Query 어노테이션을 사용하여 동일한 기능을 구현할 수 있습니다.

    다른 답변은 함수 명명 기법을 사용하여 원하는 기능을 달성하는 방법을 보여줍니다. 다음과 같이 @Query 어노테이션을 사용하여 동일한 기능을 구현할 수 있습니다.

    @Query("select t from Test t join User u where u.username = :username")
    List<Test> findAllByUsername(@Param("username")String username);
    
  3. from https://stackoverflow.com/questions/33438483/spring-data-jpa-query-manytomany by cc-by-sa and MIT license