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

Del*_*che 5 java oracle timestamp hibernate jpa

我试图使用JPA Query获取记录,JPA Query在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();
Run Code Online (Sandbox Code Playgroud)

Oracle中的数据是:

COL1_NUM    COL2_TIMESTAMP                      COL3_DATE
123         29-OCT-14 12.00.00.000000000 AM     26-Nov-14
456         29-OCT-14 12.00.00.000000000 AM     26-Nov-14

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

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

小智 6

日期和日历参数值需要特殊方法才能指定它们所代表的内容,例如纯日期,纯时间或日期和时间的组合,详见"日期和时间(时间)类型"部分.

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

query.setParameter("date", new java.util.Date(), TemporalType.DATE);
Run Code Online (Sandbox Code Playgroud)

和时间戳

query.setParameter("date", new java.util.Date(), TemporalType.TIMESTAMP);
Run Code Online (Sandbox Code Playgroud)


Del*_*che 0

感谢回复。问题解决了。

我正确使用了 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 ” //2014 年 10 月 29 日 00:00:000

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

然而,使用任何方法(java.sql.Date、java.util.Date 和 Temporal.DATE)仍然存在问题。

感谢您的贡献。:)