当前位置: 首页 > 知识库问答 >
问题:

在Spring数据JPA查询中,如何避免参数为null并设置条件

端木飞
2023-03-14

我试图使用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");

    }

在这里,我们可以看到,如果我传递一些值,然后只根据该参数进行检查。这里我需要修改我的查询,如果参数为空,那么不需要在查询中使用AND条件。

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

共有1个答案

倪阳飇
2023-03-14

这里有一些可能的选项为您
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

 类似资料:
  • 问题内容: 这是我的代码部分: 有时可以为null(Date类对象)。如果为null,则会引发以下异常: 如何使此代码正常工作并将null值持久保存到数据库中? 问题答案: 您正在使用postgresql(已经在堆栈中进行了说明),并且可能正在使用Hibernate,几乎可以肯定会遇到此问题:PostgreSQL JDBCNull String作为bytea 因此,这意味着转义到Hibernate

  • 问题内容: 我有一个实体: 我在说。这是我的DAO方法: 日志说: 请求处理失败;嵌套的异常是java.lang.NullPointerException 并将指针放在这一行: 有时必须为null。那么如何设置null? 问题答案: 如果您查看Query类的文档,setInteger()方法, 它以名称和 原始类型int 作为参数。 当您在 自动装箱 期间传递值为null的包装器类型Integer

  • 每当我的primaryGrpId为null时,以下本机查询就会因SQLGrammerException而失败,因为它需要数字。Andy知道如何在JPA中使用本机查询将参数值设置为NULL。数据库是ORACLE。 由以下原因引起:java.sql.SQLSynaxErrorException: ORA-00932:不一致的数据类型:预期的数字得到了二进制 我所有的DAO方法都只是声明的,没有提供任何

  • 问题内容: 假设上一课,您如何找到具有特定电子邮件地址的? 这样做简单吗,还是有适当的方法? 问题答案: 那并没那么简单。JPQL 为此提供了运营商: “旧”方式(类似于SQL)是:

  • 我有一个带有嵌入Id的类。当我尝试使用Jpa存储库进行搜索时,它只返回一个空对象。问题似乎出在嵌入式Id中,因为我用一个没有这个Id的类进行了测试,结果很好。 当我针对数据库进行测试时,JPA在控制台中输出的查询工作正常。 并且没有输出错误。 编辑:数据库中有数据 EDIT2:添加了equals和hashcode。 编辑3:findAll方法有效。 实体 嵌入ID 存储库 服务 正如你所看到的,我

  • 问题内容: 嗨,我有一个命名查询 我想这样设置限制: 但这在服务器启动时显示错误。我正在使用以下代码在DAO类中调用查询: 需要设置开始和结束参数。请帮忙。 问题答案: 正如@DataNucleus所说,LIMIT在JPQL中不是有效的关键字。这不是指定要返回多少行的方法。这是您的操作方式: 这将是调用命名查询的代码: