2015-10-30 33 views
14

Ich habe Entitäten User und TestSpring Data 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; 
} 

ich alle Tests, die von User-Einheit erhalten kann:

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

Aber welche Abfrage kann ich für alle Tests, die von userName finden ?

Antwort

37

wird die folgende Methode Signatur erhalten Sie wollen wollen:

List<Test> findByUsers_UserName(String userName) 

Das die property expression Merkmal Spring Data JPA verwendet. Die Signatur Users_UserName wird in JPQL x.users.userName übersetzt. Beachten Sie, dass dadurch eine genaue Übereinstimmung mit dem angegebenen Benutzernamen erzielt wird.

+1

wie Sie dies in JPQL (in Query Annotation) machen? –

+0

kann es mit Join erreicht werden. Sieh meine Antwort. – ArslanAnjum

+0

Super Lösung, vielen Dank! Ich habe eine Weile gesucht. – dave0688

0

Andere Antworten zeigen, wie die gewünschte Funktionalität mithilfe von Funktionsbenennungstechnik erreicht wird. Wir können die gleiche Funktionalität mit @Query Annotation wie folgt erreichen:

@Query("select t from Test t join User u where u.username = :username") 
List<Test> findAllByUsername(@Param("username")String username); 
+0

Aber warum auch? –