2012-02-15 6 views
2

내가 오라클 Date DB를 테이블의 컬럼에 의해이 필드를 가져 오는, 인쇄 날짜Oracle Date 필드를 JPA를 통해 java.util.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 
+0

이 정보가 도움이 되나요? http://www.coderanch.com/t/464371/ORM/java/JPA-Oracle-Date –

+0

또는 http://stackoverflow.com/questions/3469018/jpa-2-0-oracle-date-has- null-time 또는 http://stackoverflow.com/questions/6347532/jpa-entity-get-the-hours-minutes-and-sec-from-oracle-date-column –

+0

링크가 도움이되지 않습니다. 나는 기본적으로 질질 끌기 때문에 'Date' 속성과'@ Temporal' 주석이있는 엔티티 클래스가 없습니다. 또한 DB에 쓰는 것 외에 다른 것을 읽으려고합니다. 질문에 추가 정보를 입력하십시오. –

답변

6

가 좋아 나는 결국 내 문제를 해결. 그 원인은 오라클 jdbc 드라이버의 버전 타임 라인을 통한 Date (및 Timestamp) 데이터 유형 매핑의 모험이었습니다. 즉, ojdbc14.jar 드라이버를 ojdbc6.jar으로 업그레이드하면 문제가 해결되었습니다.
ojdbc14.jar를 : DATE > java.sql.Date
ojdbc6.jar : DATE >을 다음과 같이 추가 정보를 원하시면 즉 What is going on with DATE and TIMESTAMP?

를 참조 오라클 DATE 유형은 자바에 매핑됩니다 java.sql.Date에는 시간 부분이 없습니다.

편집 2012년 3월 17일 :
인해 다른 제한에 드라이버를 업그레이드 할 기회가없는 경우, 여기에 최대 절전 모드와 JPA에서의 java.sql.Timestamp 매핑 오라클 DATE에 대한 해결 방법입니다 :

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

이것은 훌륭합니다. 그러나 휴대용 솔루션이 필요한 경우 가능한 경우 네이티브 쿼리 (예 : 99.99 %의 상황)를 피하는 것이 좋습니다. – perissf

관련 문제