在休眠中具有命名查询的可选参数?

2022-09-01 08:13:11

使用 Hibernate 时,有没有办法在命名查询中指定可选参数(例如,当从表单提供搜索参数并且并非所有参数都是必需的)时?我使用的是本机 SQL 查询,但这个问题可能也适用于命名的 HQL 查询。

我很确定这个问题的答案是“不”,但我还没有在文档中找到明确的答案。


答案 1

正如前面提到的问题的不同答案中提到的,以下HQL结构对我有用:

select o from Product o WHERE :value is null or o.category = :value

如果 作为 传入 ,则返回所有产品。:valuenull

另请参见可选参数或空参数

请注意,由于此错误,这在某些版本的Sybase中不起作用,因此以下是替代方法:

select o from Product o WHERE isnull(:value, 1) = 1 or o.category = :value

答案 2

AFAIK,没有这样的东西,所以你必须为此编写一个动态查询。也许看看前面的这个答案,看看如何在HQL中做到这一点(你可以转置到SQL),并展示标准API如何使它更简单,因此在我看来更适合这项工作。

更新:(回答OP的评论)使用旧数据库确实很棘手。也许您可以使用动态本机查询并返回非托管实体。但从长远来看,事情可能会变得更糟(我不能告诉你)。也许Hibernate不是您最好的选择,像iBATIS这样的东西会给你所需的灵活性。


推荐