如何在hql中的两个日期之间动态搜索?

时间:2013-06-21 11:15:24

标签: hibernate nhibernate fluent-nhibernate hql nhibernate-mapping

我有两个日期搜索字段,即from和to。我必须从用户表中检索记录,其startDate位于搜索字段中输入的from和to日期之间,如果from和to日期为null,则必须从用户表中检索所有记录。

我尝试了以下hql查询:

FROM USER 
WHERE 
:start_flag =1 
OR  
STARTDATE between :from and :to

这里start_flag的类型为int,如果from和to为null,则设置为1。

query.setParameter("from",startDt);
query.setParameter("to",endDt);
query.setParameter("start_flag",startFlag);
l=  query.list();

这里的数据类型是:

startDt - java.util.Date

endDt- java.util.Date

startFlag- int

当我使用来运行上述查询并从中等于null 时,我得到以下异常:

SQL错误:932,SQLState:42000

ORA-00932:不一致的数据类型:预期DATE得到BINARY

您能告诉我如何编写HQL查询来实现上述功能吗?

1 个答案:

答案 0 :(得分:9)

像这样过滤它:

String query = "FROM USER WHERE :start_flag =1 ";
if(startDt!=null && endDt!=null){
   query +="OR STARTDATE between :start_date and :end_date";
}

TypedQuery<USER> hql = entityManager.createQuery(query);

if(startDt!=null && endDt!=null){
   hql.setParameter("start_date",startDt).setParameter("end_date",endDt);
}
List<USER> result = hql.setParameter("start_flag",startFlag).list();