【发布时间】:2011-11-20 12:16:15
【问题描述】:
return sessionFactory.getCurrentSession().
createQuery("FROM Weather WHERE city_id = :id AND date " +
"BETWEEN now()::date AND now()::date + (:days - 1)").
setInteger("id", city_id).setString("days", days).list();
出现错误:
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: :
如何在 HQL 中使用这种语法?
基本上问题是我想在我的查询中使用冒号(:),但是当休眠看到冒号时,它认为它是一个参数(:parameterName 是 HQL 中参数的语法),你可以从我的2 次使用(:id and :days)。
但是当我使用 now()::date 语句时,它是特定的 postgreSQL 语法,休眠会破坏一切。
【问题讨论】:
-
你想达到什么目的?投?
-
No .. 只是想使用我的 SQL 查询,但 Hibernate 将其标记为无效。
-
抱歉,您不能使用 SQL 代替 HQL。您提供了一个 SQL 查询。请参阅docs.jboss.org/hibernate/core/3.3/reference/en/html/… 并尝试使用有效的 HQL 编写您的查询。或者使用原生查询。
-
@James :
createSQLQuery不是用于原生查询吗?我试过了,但现在出现了一些不同的错误:Not all named parameters have been set: [:date]
标签: java hibernate spring postgresql hql