我需要将一个变量插入到现有的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
模型类中,即使它不在数据库中以使其更直接?
非常感谢任何帮助!
答案 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)
希望它有所帮助!