我有两个日期搜索字段,即从和到。我必须从用户表中检索其startDate位于在搜索字段中输入的起始和终止日期之间的记录,如果起始和终止日期为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
当我使用 to和from等于null 运行上述查询时 , 出现以下异常:
SQL错误:932,SQL状态:42000
ORA-00932:数据类型不一致:预期日期为BINARY
您能告诉我如何编写HQL查询以实现上述功能吗?
像这样过滤它:
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();