可选择参与命名查询在休眠?
-
20-09-2019 - |
解决方案
据我所知,没有这样的事情,所以你必须为此编写动态查询。也许看看这个以前的答案展示了如何在HQL做到这一点(你可以调换到SQL),也显示了标准API如何使它更简单,因此更适合这份工作在我看来。
更新:(回答来自OP评论)与遗留数据库工作可以用Hibernate确实棘手。也许你可以使用动态本地查询并返回非-managed实体虽然的。但是从长远来看,事情可能变得更糟(我不能告诉你)。也许Hibernate是不是在你的情况最好的选择,像iBATIS的会给你你需要的灵活性。
其他提示
不幸的是在“可选或空参数”的解决方案并不在清单中工作。 我不得不改变沿袭了查询...
命名查询定义:
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();
许多乐趣的工作。
有关具有NULL值那些具有的问题,另一种选择是使用一个替代的值。在我的情况下,我用于我的类别字段只有正值,即允许我作为我的备用值使用= -1。
因此,之前执行查询,就可以使一个小的验证:
if(value==null) {
value = -1;
}
....
....
select p from Product p WHERE :value = -1 or p.category = :value
不隶属于 StackOverflow