【发布时间】:2016-11-29 10:16:21
【问题描述】:
PG 管理员
我在 PGadmin 的 SQL 编辑器上有一个查询:
select * from list_taxi where last_update::date = now()::date
它显示了一个很好的结果,它显示了今天在线/更新的出租车。 (我使用 ::date)。 然后我使用 hibernate 在 Java 中实现查询。
Java - JDBC 休眠
我有一个时间戳变量
Timestamp nowTime = new Timestamp(System.currentTimeMillis() );
我在连接到 Postgresql (JDBC - Hibernate) 的 Java DAO 中有查询
ArrayList<Object[]> arrayList =
(ArrayList) em.createQuery("SELECT lt FROM ListTaxi lt
WHERE lt.lastUpdate::date = '" + nowTime + "'::date ")
.getResultList();
结果是因为::date而出错
java.lang.IllegalArgumentException:
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token:
: near line 1, column 75 [SELECT lt FROM model.ListTaxi lt WHERE
lt.lastUpdate::date = lt.lastUpdate::date]
如何解决?
【问题讨论】:
-
尝试 em.createQuery("FROM ListTaxi ....) 而不是 em.createQuery("SELECT lt FROM ListTaxi ...)。 SELECT * 部分,它是隐含的
-
谢谢,我做到了。但我仍然得到错误。我认为问题在于在 Java 中使用 ::date .. (java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: 意外令牌: : 第 1 行附近,第 65 列 [FROM model.ListTaxi lt WHERE lt.lastUpdate::date = lt.lastUpdate::date])
-
试试 em.createQuery(" FROM ListTaxi lt WHERE lt.lastUpdate = :nowTime) .getResultList();
-
@stackUser44:只有时间戳完全匹配时才会匹配,而不仅仅是“今天”
-
em.createQuery(" FROM ListTaxi lt order by lt.lastUpdate desc ).setFirstResult(0).setMaxResults(1).getResultList();
标签: java postgresql hibernate timestamp spring-jdbc