Ick*_*ter 30 java orm hibernate hql named-query
在使用Hibernate时,有没有办法在命名查询中指定可选参数(例如,何时从表单提供搜索参数而不是所有参数都需要)?我正在使用本机SQL查询,但问题可能也适用于命名的HQL查询.
我很确定答案是'不',但我还没有在文档中找到明确的答案.
Ian*_*nes 39
正如前面提到的问题的不同答案中所提到的,以下HQL构造对我有用:
select o from Product o WHERE :value is null or o.category = :value
Run Code Online (Sandbox Code Playgroud)
如果:value传入,null则返回所有产品.
另请参见可选参数或空参数
请注意,由于此错误,这在某些版本的Sybase中不起作用,因此以下是一种替代方法:
select o from Product o WHERE isnull(:value, 1) = 1 or o.category = :value
Run Code Online (Sandbox Code Playgroud)
小智 7
遗憾的是,"可选或空参数"下的解决方案不适用于IN列表.我不得不改变查询,如下所示......
命名查询定义:
select ls from KiCOHeader co
...
join lu.handlingType ht
where (:inHandlingTypesX = 1 OR ht.name in (:inHandlingTypes))
Run Code Online (Sandbox Code Playgroud)
码:
Set<KiHandlingTypeEnum> inHandlingTypes = ...
Query query = persistence.getEm().createNamedQuery("NAMED_QUERY");
query.setParameter("inHandlingTypesX", (inHandlingTypes == null) ? 1 : 0);
query.setParameter("inHandlingTypes", inHandlingTypes);
List<KiLogicalStock> stocks = query.getResultList();
Run Code Online (Sandbox Code Playgroud)
工作很有趣.
小智 5
处理可选列表参数的另一个解决方案是使用COALESCE函数检查 null。Hibernate 支持COALESCE ,它返回列表中的第一个非空参数,允许您在列表中有多个项目时检查列表中是否为空,而不会破坏语法。
带有可选参数和列表参数的 HQL 示例:
select obj from MyEntity obj
where ( COALESCE( null, :listParameter ) is null or obj.field1 in (:listParameter) )
and ( :parameter is null or obj.field2 = :parameter )
Run Code Online (Sandbox Code Playgroud)
这对我使用 SQL Server 方言很有用。
| 归档时间: |
|
| 查看次数: |
57158 次 |
| 最近记录: |