web-dev-qa-db-fra.com

Spring Data JPA: requête ManyToMany

J'ai des entités User et Test

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

@Entity
public class Test {
    private Long id;

    @ManyToMany
    private Set<User> users;
}

Je peux obtenir tous les tests par entité utilisateur:

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

Mais quelle requête puis-je utiliser pour trouver tous les tests par userName?

27
qwe asd

La signature de méthode suivante vous donnera envie:

List<Test> findByUsers_UserName(String userName)

Cela utilise la fonction expression de propriété de Spring Data JPA. La signature Users_UserName sera traduit en JPQL x.users.userName. Notez que cela effectuera une correspondance exacte sur le nom d'utilisateur donné.

67
Tunaki

Une autre réponse montre comment obtenir la fonctionnalité souhaitée en utilisant la technique de dénomination des fonctions. Nous pouvons obtenir la même fonctionnalité en utilisant l'annotation @Query comme suit:

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