Как правильно преобразовать поле даты Oracle в java.util.Date через JPA? - PullRequest
2 голосов
/ 15 февраля 2012

У меня есть столбец 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]));
}

Часть «date» напечатанных дат верна, но для «time» (т. Е. Часа и секунды) «00:00» для всех из них. Однако, когда я проверил это поле в SQL Developer, фактические части времени отличаются от «00:00». В чем проблема? Заранее спасибо.

EDIT: Я использую,

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

1 Ответ

6 голосов
/ 17 февраля 2012

Хорошо, я наконец решил свою проблему.Причиной стало приключение DateTimestamp) отображений типов данных драйвера jdbc Oracle через временную шкалу его версии.Короче говоря, проблема была решена путем обновления драйвера 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:
Если нет возможности обновить драйвер из-за других ограничений, то здесь есть обходной путь для преобразования Oracle DATE в java.sql.Timestamp вJPA с 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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...