如果参数为空,在Spring Data JPA查询中如何避免AND条件

3

我将尝试使用Spring Data JPA获取一个查询的结果。在这里,我将发送一些参数并根据其接收结果。

我的repository查询如下:

@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");

    }

在这里,我们可以看到只有当我传递了某个值时才根据该参数进行检查。在这里,我需要修改我的查询,如果参数为空,则不需要在查询中使用AND条件。

如果参数为空,我该如何修改此查询以避免AND条件?我是Spring Data JPA世界的新手。


这个回答解决了你的问题吗?Spring Data查询方法中的可选参数 - Chanandler Bong
1个回答

3
以下是一些可能的选项:
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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接