[英]Optional parameters with named query in Hibernate?
遗憾的是,“可选或空参数”下的解决方案不适用于IN列表。 我不得不改变查询,如下所示......
命名查询定义:
select ls from KiCOHeader co
...
join lu.handlingType ht
where (:inHandlingTypesX = 1 OR ht.name in (:inHandlingTypes))
码:
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();
工作很有趣。
处理可选列表参数的另一种解决方案是使用COALESCE函数检查null。 Hibernate支持 COALESCE从列表返回第一个非null参数,允许您在列表中检查多个项目时不会破坏语法的列表中的null。
带有可选参数和列表参数的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 )
这对我有一个SQL Server方言。
对于那些有NULL值问题的人,另一种选择是使用备用值。 在我的例子中,我只使用了我的类别字段的正值,这允许我使用我的替代值= -1。
因此,在执行查询之前,您可以进行小的验证:
if(value==null) {
value = -1;
}
....
....
select p from Product p WHERE :value = -1 or p.category = :value
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.