繁体   English   中英

如何通过JPA将Oracle Date字段正确转换为java.util.Date?

[英]How to convert correctly an Oracle Date field into java.util.Date through JPA?

我在数据库表中有一个Oracle Date列,并通过以下方式获取此字段:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("dbPU");
EntityManager em = emf.createEntityManager();

DateFormat dateFormat = new SimpleDateFormat("dd.MM.yyyy, HH:mm");
String query = "SELECT T.MDATE FROM MTABLE T";

List<Object[]> resultList = em.createNativeQuery(query).getResultList();
for (Object[] data : resultList) {
    System.out.println(dateFormat.format((java.util.Date) data[0]));
}

打印日期的“日期”部分是正确的,但所有日期的“时间”(即小时和秒)部分均为“ 00:00”。 但是,当我在SQL Developer中选中此字段时,实际的“时间”部分与“ 00:00”不同。 问题出在哪儿? 提前致谢。

编辑:我正在使用,

Hibernate-Version: 3.2.5.ga
hibernate.dialect = org.hibernate.dialect.Oracle10gDialect
Oracle JDBC Driver version 10.2.0.1.0
Oracle Database 11g Express Edition Release 11.2.0.2.0

好的,我终于解决了我的问题。 原因是Oracle jdbc驱动程序通过其Date Timestamp进行了Date (和Timestamp )数据类型映射的冒险。 简而言之,通过将ojdbc14.jar驱动程序升级到ojdbc6.jar解决了该问题。 有关更多信息,请参阅DATE和TIMESTAMP怎么回事?

换句话说,Oracle DATE类型被映射到Java,如下所示:
ojdbc14.jar :日期> java.sql.Date
ojdbc6.jar :日期> java.sql.Timestamp
其中java.sql.Date没有时间部分。

编辑17.03.2012:
如果由于其他限制而没有机会升级驱动程序,那么这里是使用Hibernate将Oracle DATE映射到JPA中的java.sql.Timestamp的解决方法:

String queryStr = "SELECT T.MDATE FROM MTABLE T";
Query query = em.createNativeQuery(queryStr);
SQLQuery sqlQuery = (SQLQuery) ((HibernateQuery) query).getHibernateQuery();
sqlQuery.addScalar("MDATE", Hibernate.TIMESTAMP);
List<Object[]> resultList = query.getResultList();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM