Spring Data JPA:查询ManyToMany

我有实体UserTest

 @Entity public class User { private Long id; private String userName; } @Entity public class Test { private Long id; @ManyToMany private Set users; } 

我可以通过用户实体获得所有测试:

 public interface TestRepository extends JpaRepository { List findAllByUsers(User user); } 

但是我可以使用哪个查询来查找userName所有测试?

您可能希望获得以下方法签名:

 List findByUsers_UserName(String userName) 

这是使用Spring Data JPA的属性表达式function。 签名Users_UserName将转换为JPQL x.users.userName 。 请注意,这将在给定的用户名上执行完全匹配。

其他答案显示了如何使用函数命名技术实现所需的function。 我们可以使用@Query注释实现相同的function,如下所示:

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