以下HQL不起作用(日期范围内的记录)

时间:2016-09-02 08:01:33

标签: hibernate

我想在两个日期之间获取记录。以下查询无效。尝试以下方法:

1. from Employee where emp_Gkey=121 and empCreated BETWEEN '2016-08-29 
   00:00:00.0' and '2016-09-02 00:00:0.0';
2. from Employee where emp_Gkey=121 having empCreated BETWEEN '2016-08-29
   00:00:00.0' and '2016-09-02 00:00:0.0';
3. from Employee where emp_Gkey=121 and empCreated >= '2016-08-29
   00:00:00.0' and empCreated <= '2016-09-02 00:00:0.0';

请帮忙。我正在使用Oracle数据库,而hibernate列类型被定义为&#34; timestamp&#34;。

感谢。

1 个答案:

答案 0 :(得分:0)

在HQL查询中,参数需要与实体中的映射属性具有相同的类型/类。

你需要这样的东西:

final TypedQuery<Employee> query =
     em.createQuery("select e from Employee e where e.empCreated BETWEEN :from AND :to");
query.setParameter("from", new Date());
query.setParameter("to", new Date());

鉴于empCreated变量的类型为Date

我在这里使用标准的JPA(JPQL),我将把你的方法调用转换为你正在使用的任何东西。

通常,在编写HQL / JPQL查询时,您必须忘记数据库的外观。查询是针对实体(java类),而不是数据库表!