【问题标题】:How to use ::date in java JDBC hibernate?如何在 java JDBC 休眠中使用 ::date?
【发布时间】: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


【解决方案1】:

作为一种解决方法,您可以这样做

WHERE lastUpdate > :startOfTodayTimestamp  -- set this to :00:00:00 today

如果您有未来的日期,或者不只是今天,您还需要添加一个上限。

【讨论】:

  • 我在 Stackoverflow 上进行了一些搜索,但找不到不落入本机 SQL 的简洁解决方案)。这种解决方法的好处还在于它对索引非常友好(某些转换可能不是)。
  • java.util.Date today = new java.util.Date(); today.setHours(0); today.setMinutes(0); today.setSeconds(0); Timestamp startOfTodayTimestamp = new Timestamp(today.getTime());
  • 好主意!我按照你的想法解决了这个问题,非常感谢大师
猜你喜欢
  • 1970-01-01
  • 2010-11-24
  • 2011-05-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2015-02-01
  • 2010-12-03
相关资源
最近更新 更多