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

在检查列表中包含的整数值时,如何处理HQL查询中的空值

章青青
2023-03-14

我有一个Spring Boot存储库,在其中我尝试使用HQL创建一个查询函数。

该函数接受一个整数参数,如果该参数为null,则查询应忽略该参数,否则应检查列表是否包含该值。

我有两个部分,空检查和列表检查,看起来像这样:

@Query("SELECT u FROM MyEntity " +
" WHERE (:myParam is null or :myParam in (2, 3))"
)

现在的问题是,对于(2,3)部分中的myParam,它抱怨“不一致的数据类型:预期的二进制数

(当:myParam为空,对于:myParam!=null它有效)

我试过:

>

  • 将参数或空值转换为

    使用coalesce(:myParam,CAST(NULL AS int))解决了一个类似的问题:myParam是一个整数列表

    使用switch case语句

    (case当:spracheKy为空,然后为真,当:spracheKy在(2,3)中然后为真,否则为假结束)=true

    提前感谢您的帮助

  • 共有1个答案

    韦业
    2023-03-14

    为什么不使用两种不同的存储库方法,例如,一种不带参数,另一种带参数。然后决定并将决策逻辑封装在服务层的一个单独的方法中——我的意思是根据参数是否为null调用存储库方法的逻辑……可以如下所示:

    @Service
    @Transactional
    public class YourService {
    
        // autowired by constructor injection
        private final YourEntityRepository repo;
    
        public List<YourEntity> getAllYourEntitiesByParam(Long param) {
            if (param == null) {
                return repo.findAll();
            }
            return repo.findAllByParam(param);
        }
    }
    
     类似资料:
    • 我使用Spring Roo对现有数据库进行反向工程,以便对现有数据库进行hibernate建模,在存在复合主键的情况下,它会生成XyzClass和XYZClasspk。

    • 我使用从我的mysql数据库添加节点到。 我的问题是记录中的某些列值可能为null。我如何在cypher查询中处理它们,因为对于mysql表中的null值,它没有创建任何节点。 下面是我使用neo4j java驱动程序创建节点的代码 在neo4j浏览器控制台中,当我在cypher下面运行查询时,没有形成任何节点。 更新:我能够在Java处理空值。但是对于另一张桌子,我有一些奇怪的行为。 在Neo4

    • 我有两个Firestore集合,和。下面是每个文件中的典型文档所包含内容的简化示例。 此设置使查询任何给定用户按时间顺序排序的帖子变得非常容易,只需查找其字段等于该用户的文档引用的文档。 我在iOS/Swift中通过以下方法实现了这一点,尽管我们正在为iOS、Android和Web构建这个应用程序。 是否可以构建我正在描述的查询,或者我将不得不采用这种不太理想的方法?这似乎是一个相当常见的查询用例

    • 问题内容: 我需要执行django查询,以检查字段是否包含列表中的所有值。该列表的长度将有所不同 例 问题答案: 对于python 3

    • 问题内容: 找出JavaScript数组是否包含值的最简洁,最有效的方法是什么? 这是我知道的唯一方法: 有没有更好,更简洁的方法来实现这一目标? 这与Stack Overflow问题密切相关。在JavaScript数组中查找项目的最佳方法?解决使用数组查找对象的问题indexOf。 问题答案: 现代的浏览器,这不正是这一点,得到广泛支持的人,除IE: 你也可以使用,它不太直接,但对于过时的浏览器

    • 问题内容: 找出JavaScript数组是否包含值的最简洁,最有效的方法是什么? 这是我知道的唯一方法: 有没有更好,更简洁的方法来实现这一目标? 这与Stack Overflow问题密切相关。 在JavaScript数组中查找项目的最佳方法?解决使用数组查找对象的问题。 问题答案: 现代的浏览器,这不正是这一点,得到广泛支持的人,除IE: 你也可以使用,它不太直接,但对于过时的浏览器不需要使用。