我正在使用一个命名查询来搜索我的项目中的一些结果。 例如(来自StructureEventDAO,其中se.Structure.StructureId =:StructureId和se.eventMaster.eventName =:eventName)。
如果我传递了所需的两个命名参数值,那么这会给出正确的结果。
我只是想知道如果运行时我有一个参数为Null并且我想要 忽略它并获得结果? (这意味着在我的查询中,说StructureId = null所以我会得到 所有将传递eventName的StructureEventDAO
此致 阿米特
答案 0 :(得分:0)
from StructureEventDAO as se where (se.Structure.StructureId = :StructureId or
se.Structure.StructureId is null) and se.eventMaster.eventName =:eventName
我完全不记得sintaxe,但我认为你可以做这样的事情。
答案 1 :(得分:0)
这通常是您使用动态生成的查询(即不是NamedQuery
)实现的内容,基本上有两个选项:
在我看来,Criteria API对于动态查询更优雅,更简洁,例如Hibernate Querying 102 : Criteria API中所讨论的。以下是文章中的一个例子:
Criteria criteria = session.createCriteria(Accommodation.class);
if (startDate != null) {
criteria.add(Expression.ge("availabilityDate", startDate);
}
if (endDate != null) {
criteria.add(Expression.le("availabilityDate", endDate);
}
这比生成等效的HQL查询字符串容易得多(阅读整篇文章了解所有细节)。
另见: