@Entity
public class User {
private Long id;
private String userName;
}
@Entity
public class Test {
private Long id;
@ManyToMany
private Set<User> users;
}
Aber welche Abfrage kann ich verwenden, um alle Tests zu finden? userName?
Die folgende Methodensignatur wird Sie begeistern:
List<Test> findByUsers_UserName(String userName)
Dies nutzt die Eigenschaftsausdruck Funktion von Spring Data JPA. Die Unterschrift Users_UserName wird in JPQL übersetzt x.users.userName. Beachten Sie, dass dies eine exakte Übereinstimmung mit dem angegebenen Benutzernamen durchführt.
wie macht man das in JPQL (in Query Annotation)?
– Oleksandr H
7. August 2017 um 19:48 Uhr
Dies kann mit join erreicht werden. siehe meine antwort.
– ArslanAnjum
18. August 2017 um 17:47 Uhr
Super Lösung, vielen Dank! Suche schon eine Weile.
– dave0688
5. Oktober 2017 um 13:34 Uhr
Eine andere Antwort zeigt, wie die gewünschte Funktionalität mithilfe der Funktionsbenennungstechnik erreicht wird. Wir können dieselbe Funktionalität mit der @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);
Aber warum eigentlich?
– Kevin van Dyck
18. Februar 2018 um 14:23 Uhr
@KevinVanDyck – Da Sie die Bedingung auf die Benutzerentität setzen müssen, aber die Viele-zu-Viele nicht als bidirektional definiert ist, müssen Sie von der Entität ausgehen, die sie definiert, dh. Prüfen
– GabiM
20. September 2018 um 12:43 Uhr
Ich habe @JoinTable verwendet und es funktioniert damit:
@Query("select t from Test t join t.users u where u.username = :username")
List<Test> findAllByUsername(@Param("username") String username);
t.users u Anstatt von User u
14363000cookie-checkSpring Data JPA: Abfrage von ManyToManyyes