我试图使用spring数据JPA获取一个查询的结果。在这里,我发送一些参数和接收结果。
我的存储库查询是,
@Query("select u.username,p.pname from Users u join u.priviJoin p where u.username = :uname AND p.pname = :pname")
List<Users> findByUsername(@Param("uname") String uname , @Param("pname") String pname );
从控制器调用如下,
@RequestMapping(value = "/joinResult", method = RequestMethod.GET)
public List<Users> joinResultShow()
{
return (List<Users>) userRepo.findByUsername("test_user","testRole");
}
在这里我们可以看到,如果我传递一些值,那么只根据该参数进行检查。在这里,我需要修改我的查询,如果参数为null,则不需要在查询中使用AND条件。
如果参数为null,任何人都可以帮我修改此查询以避免AND条件吗? ,因为我是新的春天数据JPA世界。有人帮我纠正我上面提到的查询结果吗?
答案 0 :(得分:2)
以下是一些可能的选项 1.在您的存储库中创建多个方法,如
@Query("select u.username,p.pname from Users u join u.priviJoin p where u.username = :uname AND p.pname = :pname")
List<Users> findByusernamewithRole(@Param("uname") String uname , @Param("pname") String pname );
@Query("select u.username,p.pname from Users u join u.priviJoin p where u.username = :uname")
List<Users> findByUsernameWithoutRole(@Param("uname") String uname);
编写自定义存储库并使用EntityManager
。有了这个,您可以使用CriteriaBuilder根据您的输入创建动态查询,并在查询中使用此条件。
最后,在动态输入的情况下(如您所见),最受欢迎的选项是Querydsl。
一些关于querydsl的文章
http://www.baeldung.com/querydsl-with-jpa-tutorial
http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html