Java Spring数据JPA:查询多个
我有实体Java Spring数据JPA:查询多个,java,spring,jpa,spring-data,spring-data-jpa,Java,Spring,Jpa,Spring Data,Spring Data Jpa,我有实体User和Test @Entity public class User { private Long id; private String userName; } @Entity public class Test { private Long id; @ManyToMany private Set<User> users; } @实体 公共类用户{ 私人长id; 私有字符串用户名; } @实体 公开课考试{ 私人长id; @许多
User
和Test
@Entity
public class User {
private Long id;
private String userName;
}
@Entity
public class Test {
private Long id;
@ManyToMany
private Set<User> users;
}
@实体
公共类用户{
私人长id;
私有字符串用户名;
}
@实体
公开课考试{
私人长id;
@许多
私人用户;
}
我可以按用户实体获取所有测试:
public interface TestRepository extends JpaRepository<EventSettings, Long> {
List<Test> findAllByUsers(User user);
}
public interface TestRepository扩展了JpaRepository{
列出findAllByUsers(用户);
}
但是,通过
用户名
,我可以使用哪个查询来查找所有测试 以下方法签名将获得您想要的:
List<Test> findByUsers_UserName(String userName)
列出findByUsers\u用户名(字符串用户名)
这是使用Spring数据JPA的特性。签名
Users\u UserName
将被翻译成JPQLx.UserName
。请注意,这将对给定用户名执行精确匹配。以下方法签名将获得您想要的:
List<Test> findByUsers_UserName(String userName)
列出findByUsers\u用户名(字符串用户名)
这是使用Spring数据JPA的特性。签名
Users\u UserName
将被翻译成JPQLx.UserName
。请注意,这将对给定的用户名执行精确匹配。其他答案显示了如何使用函数命名技术实现所需的功能。我们可以使用@Query annotation实现相同的功能,如下所示:
@Query("select t from Test t join User u where u.username = :username")
List<Test> findAllByUsername(@Param("username")String username);
@Query(“从测试t中选择t加入用户u,其中u.username=:username”)
列出findAllByUsername(@Param(“用户名”)字符串用户名);
其他答案显示了如何使用函数命名技术实现所需的功能。我们可以使用@Query annotation实现相同的功能,如下所示:
@Query("select t from Test t join User u where u.username = :username")
List<Test> findAllByUsername(@Param("username")String username);
@Query(“从测试t中选择t加入用户u,其中u.username=:username”)
列出findAllByUsername(@Param(“用户名”)字符串用户名);
我在使用@JoinTable,我让它与以下内容一起工作:
@Query("select t from Test t join t.users u where u.username = :username")
List<Test> findAllByUsername(@Param("username") String username);
@Query(“从测试t中选择t,加入t.users u,其中u.username=:username”)
列出findAllByUsername(@Param(“用户名”)字符串用户名);
t.users u
而不是User u
我使用了@JoinTable,我用它来处理这个问题:
@Query("select t from Test t join t.users u where u.username = :username")
List<Test> findAllByUsername(@Param("username") String username);
@Query(“从测试t中选择t,加入t.users u,其中u.username=:username”)
列出findAllByUsername(@Param(“用户名”)字符串用户名);
t.users u
而不是User u
如何在JPQL(查询注释中)中实现此功能?可以使用join实现。看看我的答案。很棒的解决方案,非常感谢!已经搜索了一段时间。如何在JPQL(在查询注释中)中实现这一点?可以使用join实现。看看我的答案。很棒的解决方案,非常感谢!已经搜索了一段时间。但是为什么呢?@KevinVanDyck-因为您需要在用户实体上设置条件,但是多对多并没有定义为双向的,所以您必须从定义它的实体开始,但是为什么?@KevinVanDyck-因为你需要在用户实体上设置条件,但是多对多并没有定义为双向的,所以你必须从定义它的实体开始,即Test