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

可选地向Spring数据JPA本机查询添加参数

盖雪峰
2023-03-14

我使用Spring Data JPA进行如下原生查询

public interface ItemRepository extends JpaRepository<ItemEntity, Long> {

  @Query(value = "select * from items i where i.category = :itemCategory and i.item_code = :itemCode", nativeQuery = true)
  Page<ItemEntity> search(@Param("itemCategory") String itemCategory, @Param("itemCode") String itemCode, Pageable pageable);
}

现在,我的用例是

  1. 如果itemCode可用,则只应返回该类别中具有该代码的项目
  2. 但如果itemCode不可用,则应返回该类别中的所有项目

因此,上述类别的问题是当itemCode作为NULL传递时,不会返回任何数据,因为它与任何内容都不匹配。尽管要求很高,但它应该被忽略。

那么,有没有一种方法可以选择性地向Spring数据JPA本机查询添加一个子句呢。我知道使用CriteriaQuery是可能的,但是我们能为原生查询做类似的事情吗?

谢谢

共有2个答案

卜弘文
2023-03-14

只需修改在哪里条件

i.item_code = :itemCode

:itemCode is null or i.item_code = :itemCode
葛鸿熙
2023-03-14

是的,原生查询也是可行的。这里有很好的解释,看看这个

#方法1

@NamedQuery(name = "getUser", query = "select u from User u"
            + " where (:id is null or u.id = :id)"    
            + " And :username"

:itemCode is null or i.item_code = :itemCode

#方法2

# UserDao.java 

  public User getUser(Long id, String usename) {
        String getUser = "select u from user u where u.id " + Dao.isNull(id) 
                       + " And u.username " + Dao.isNull(username);
        Query query = Dao.entityManager.createQuery(getUser);
    }

# Dao.java

   public static String isNull(Object field) {
        if (field != null) {
                if (field instanceof String) {
                    return " = " + "'" + field + "'";
                } else {
                    return " = " + field;
                }

            } else {
                return " is NULL ";
            }
    }

如何处理JPA命名查询中数字类型的空值

 类似资料:
  • 我想用spring Boot1.5执行过滤器列表的查询,我有必需的参数(用户名)和可选的参数(电子邮件),我如何在查询中分配可选的参数?@Query(“从User u中选择u.username LIKE:username和u.email=:email”)公共页面getUsers(@param(“username”)字符串username,@param(“email”)字符串email);http:

  • 我使用注释和注释执行查询,并从数据库表中删除记录。 错误: xxx的例外。xxx。xx,原因='javax。坚持不懈TransactionRequiredException:执行更新/删除查询“和异常=”执行更新/删除查询;嵌套的异常是javax。坚持不懈TransactionRequiredException:执行更新/删除查询'

  • 我使用Spring引导和Spring数据JPA。它工作得很好但是!我需要使用复杂的本地查询从Oracle数据库(源数据从SAP ERP)。 假设查询包含5个joned表(一个键或组合键)。我可以使用很多参数。 解决方案: 1)由于耗时,使用JPA为该查询编写新查询是不真实的。创建表之间的所有键关系似乎很复杂。 2)为了运行这些查询,我使用JDBC。这很容易,因为我准备了本机查询。但我深信这种做法是

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

  • 是否有其他选择-或者使用mongoTemplate是最好的选择? 谢谢

  • 问题内容: 我正在将spring-data mongo与基于JSON的查询方法一起使用,并且不确定如何在搜索查询中允许使用可选参数。 例如-说我有以下功能 -但是我不想应用名称正则表达式匹配,或者如果将NULL值传递给方法,则不希望应用日期范围限制。 目前看来,我可能必须使用mongoTemplate构建查询。 有没有其他选择-还是使用mongoTemplate是最佳选择? 谢谢 问题答案: 为了