一尘不染

带有时间戳和日期字段的JPA选择查询无法检索结果

hibernate

我正在尝试使用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年10月29日至29日12.00.00.000000000 14年11月26日
456 14年10月29日12.00.00.000000000 AM 14年11月26日

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

请开导正确的方法。:) 谢谢 !!


阅读 729

收藏
2020-06-20

共1个答案

一尘不染

感谢回复。问题已解决。

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

“ MMM dd yyyy hh :mm:sssa” // 2014年10月29日12:00:000AM

并不是…

“ MMM dd yyyy HH :mm:sss a ” // OCT 29 2014 00:00:000

剩下的50%是与COL3_DATE列有关,该列被错误地定义为DATE,但最初是TIMESTAMP;将其更改为TIMESTAMP可解决此问题。

但是,无论如何,使用Date仍然是问题(java.sql.Date,带有Temporal.DATE的java.util.Date)。

感谢您的贡献。:)

2020-06-20