Hibernate,命名查询&处理NamedParamater的情况是Null或不可用

时间:2010-10-05 11:04:09

标签: hibernate

我正在使用一个命名查询来搜索我的项目中的一些结果。 例如(来自StructureEventDAO,其中se.Structure.StructureId =:StructureId和se.eventMaster.eventName =:eventName)。

如果我传递了所需的两个命名参数值,那么这会给出正确的结果。

我只是想知道如果运行时我有一个参数为Null并且我想要 忽略它并获得结果? (这意味着在我的查询中,说StructureId = null所以我会得到 所有将传递eventName的StructureEventDAO

此致 阿米特

2 个答案:

答案 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)实现的内容,基本上有两个选项:

  1. 动态构建HQL字符串(即不是命名查询)〜或〜
  2. 使用Criteria API
  3. 在我看来,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查询字符串容易得多(阅读整篇文章了解所有细节)。

    另见:

    资源

    相关问题