插入变量的HQL where子句

时间:2015-03-31 16:23:52

标签: java oracle hibernate toad

我需要将一个变量插入到现有的HQL where子句中,如下所示:

java.sql.Timestamp currentDate = new Timestamp(System.currentTimeMillis());

Query q = em.createQuery("from fAdjustmentReason a where a.startDate >= " + currentDate + " and a.endDate <= " + currentDate);

执行上述操作时出现以下错误消息:

org.hibernate.hql.ast.QuerySyntaxException: unexpected token: 18 near line 1, column 79 
        [from gov.va.med.domain.fee.AdjustmentReason a where a.startDate >= 1969-12-31 18:00:00.0 and a.endDate <= 1969-12-31 18:00:00.0]

我是否应该将currentDate字段添加到现有的AdjustmentReason模型类中,即使它不在数据库中以使其更直接?

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

在创建Query对象时,应使用setParameter在查询中设置日期,例如。

 Query q = em.createQuery("from fAdjustmentReason a where a.startDate >= :0 and a.endDate <= :1");
q.setParameter(0,dateFrom);
q.setParameter(1,dateFrom);

这就是准备声明的原因。 完整示例可以找到here

答案 1 :(得分:0)

这样你的做法不是最好的方法,它会让你的代码容易受到SQL注入的影响,正确的做法和解决问题的方法如下:

 Query q = em.createQuery("from fAdjustmentReason a where a.startDate >= :startDate and a.endDate <= :endDate")
.setParameter("starDate", currentDate)
.setParameter("endDate", currentDate)

希望它有所帮助!