gpt4 book ai didi

java - 检查列表中是否包含整数值时如何处理 HQL 查询中的空值

转载 作者:行者123 更新时间:2023-12-01 23:47:37 25 4
gpt4 key购买 nike

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

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

我的 where 子句分为两部分,空检查和列表检查,如下所示:

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

现在的问题是,对于 (2, 3) 中的 :myParam 部分,它提示“数据类型不一致:预期的 BINARY 为 NUMBER

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

我尝试过:

  • 将参数或 null 值转换为 in

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

  • 使用 switch case 语句

(当 :spracheKy 为 null 时为 true,当 :spracheKy in (2, 3) then true else false end 时为 true)= true

预先感谢您的帮助

最佳答案

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

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

关于java - 检查列表中是否包含整数值时如何处理 HQL 查询中的空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58232935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com