如果在spring数据JPA查询中参数为null,如何避免AND条件

时间:2018-02-21 14:35:05

标签: spring-data-jpa jpql

我试图使用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世界。有人帮我纠正我上面提到的查询结果吗?

1 个答案:

答案 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);
  1. 编写自定义存储库并使用EntityManager。有了这个,您可以使用CriteriaBuilder根据您的输入创建动态查询,并在查询中使用此条件。

  2. 最后,在动态输入的情况下(如您所见),最受欢迎的选项是Querydsl。 一些关于querydsl的文章 http://www.baeldung.com/querydsl-with-jpa-tutorial
    http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html