Spring Data JPA: Abfrage von ManyToMany

Lesezeit: 1 Minute

Benutzeravatar von qwe asd
qwe asd

Ich habe Entitäten User und Test

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

@Entity
public class Test {
    private Long id;

    @ManyToMany
    private Set<User> users;
}

Ich kann alle Tests nach Benutzerentität abrufen:

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

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

1436300cookie-checkSpring Data JPA: Abfrage von ManyToMany

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy