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

我在db表中有一个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 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 )数据类型映射的冒险。 简而言之,通过将ojdbc14.jar驱动程序升级到ojdbc6.jar解决了该问题。 有关更多信息,请参阅DATE和TIMESTAMP发生了什么?

换句话说,Oracle DATE类型映射到Java,如下所示:
ojdbc14.jar :DATE > java.sql.Date
ojdbc6.jar :DATE > 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 resultList = query.getResultList();