我正在尝试使用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实体具有这些列作为“时间戳记”和“日期”。
请开导正确的方法。:) 谢谢 !!
感谢回复。问题已解决。
我正确使用了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)。
感谢您的贡献。:)