如何通过JPA将Oracle Date字段正确转换为java.util.Date? [英] How to convert correctly an Oracle Date field into java.util.Date through JPA?

查看:313
本文介绍了如何通过JPA将Oracle Date字段正确转换为java.util.Date?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在数据库表中有一个Oracle Date 列,并通过

I have an Oracle Date column in a db table, and fetching this field by,

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不同。哪里有问题?感谢提前。

The "date" part of printed dates are correct but the "time" (ie. hour and second) parts are "00:00" for all of them. However when I checked this field in SQL Developer, the actual "time" parts are different than "00:00". Where is the problem? Thanks in advance.

编辑:
我正在使用

I am using,

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?

Ok I finally resolved my problem. The cause was the adventure of Date (and Timestamp) datatype mappings of Oracle jdbc driver through its version timeline. In short, the problem was resolved by upgrading the ojdbc14.jar driver to ojdbc6.jar. For more info refer to What is going on with DATE and TIMESTAMP?

换句话说,Oracle DATE 类型映射到Java,如下所示:

ojdbc14.jar :DATE > java.sql.Date

ojdbc6 .jar :DATE > java.sql.Timestamp

其中java.sql.Date没有时间部分。

In other words, the Oracle DATE type is mapped to Java as follows:
ojdbc14.jar : DATE > java.sql.Date
ojdbc6.jar : DATE > java.sql.Timestamp
where java.sql.Date has no time parts.

编辑17.03.2012:

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

EDIT 17.03.2012 :
If there is no chance to upgrade the driver due to other restrictions, then here is workaround for mapping Oracle DATE to java.sql.Timestamp in JPA with Hibernate:

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();

这篇关于如何通过JPA将Oracle Date字段正确转换为java.util.Date?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆