【问题标题】:JPA select query with timestamp and date fields fail to retrieve results带有时间戳和日期字段的 JPA 选择查询无法检索结果
【发布时间】:2015-03-05 13:53:15
【问题描述】:

我正在尝试使用 JPA 查询获取记录,该查询在 WHERE 子句中有 DATE 和 TIMESTAMP 列。但不知何故,日期和时间戳列无法从数据库中检索任何内容。

代码段:

String sql = "Select F.* from FIN_TABLE F where F.COL1_NUM = :COL1 and F.COL2_TIMESTAMP =:COL2 and F.COL3_DATE =:COL3";
Query query = JPAentityManager.createNativeQuery(sql);
query.setParameter("COL1", 123);
//java.sql.Timestamp:2014-10-29 12:00:00.0
query.setParameter("COL2", new java.sql.Timestamp(new java.sql.Date(new SimpleDateFormat("MMM dd yyyy HH:mm:sssa").parse("OCT 29 2014 12:00:000AM").getTime()).getTime()));
//java.sql.Date:2014-10-29
query.setParameter("COL3", new java.sql.Date(new SimpleDateFormat("MMM dd yyyy HH:mm:sssa").parse("OCT 29 2014 12:00:000AM").getTime()));

List<FinTable> result =  (List<FinTable>)query.getResultList();

Oracle 中的数据是:

COL1_NUM COL2_TIMESTAMP COL3_DATE 123 14 年 10 月 29 日 14 年 11 月 26 日上午 12.00.00.000000000 456 14 年 10 月 29 日 14 年 11 月 26 日上午 12.00.00.000000000

我最初尝试使用 EntityManager.find(Class, Object) 检索结果,但它也失败了,所以我尝试使用 createNativeQuery(),它也未能成功。 我的 FinTable 实体将这些列作为时间戳和日期。

请指教正确的方法。 :) 谢谢!!

【问题讨论】:

    标签: java oracle hibernate jpa timestamp


    【解决方案1】:

    日期和日历参数值需要特殊方法来指定它们所代表的内容,例如纯日期、纯时间或日期和时间的组合,如日期和时间(时间)类型部分中详细说明的那样.

    例如,以下调用将 Date 对象作为纯日期(无时间)传递:

    query.setParameter("date", new java.util.Date(), TemporalType.DATE);
    

    和时间戳

    query.setParameter("date", new java.util.Date(), TemporalType.TIMESTAMP);
    

    【讨论】:

    • 如何使用本机查询?
    • @dr.bapbap 我们如何指定日期列表?
    【解决方案2】:

    感谢您的回复。 问题已解决。

    我正确地使用了 DATE 和 TIMESTAMP 对象。
    50% 的问题出在 SimpleDateFormat 解析中,我提到了 24 小时制 (HH) 和 AM/PM,正确使用的解析器是……

    "MMM dd yyyy hh:mm:sssa" //OCT 29 2014 12:00:000AM

    而不是……

    "MMM dd yyyy HH:mm:sssa" //OCT 29 2014 00:00:000

    剩下 50% 的问题出在 COL3_DATE 列上,该列被错误地定义为 DATE 但最初是一个 TIMESTAMP;将其更改为 TIMESTAMP 解决了问题。

    但是,使用 Date 仍然是任何方法的问题(java.sql.Date、java.util.Date 和 Temporal.DATE)。

    感谢您的贡献。 :)

    【讨论】:

      猜你喜欢
      • 2016-03-09
      • 2013-11-17
      • 2012-03-06
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-20
      • 1970-01-01
      相关资源
      最近更新 更多