Oracle
 sql >> база данни >  >> RDS >> Oracle

JPA 2.0 Oracle DATE има нулево време

За този вид проблеми обикновено помага да предоставите версията на JDBC драйвера и диалекта, който използвате.

Както и да е, разбирам, че всъщност искате следното съпоставяне (за ДАТА и ВРЕМЕ):

@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;

И проблемът, с който се сблъсквате, по някакъв начин е свързан с лудостта, въведена от Oracle с версия 9.2, вижте Какво става с DATE и TIMESTAMP? (накратко, те въведоха TIMESTAMP колона и промени съпоставянето на DATE тип SQL, прочетете ЧЗВ). Има няколко опции за решаването му (разбира се, предполагам, че използвате TemporalType.TIMESTAMP картографиране):

Използвайте или TIMESTAMP тип колона (Нямам предвид TemporalType.TIMESTAMP тук наистина имам предвид типа колона от страна на DB). Но ако не се нуждаете от наносекунда точност, това не е най-добрият избор.

Или задайте oracle.jdbc.V8Compatible=true режим на съвместимост, или като системно свойство, или като свойство на връзка:

<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>

Да, можете да зададете произволни свойства на връзката като това. От документацията на Hibernate:

Или използвайте драйвера Oracle JDBC 11.1 (те "поправиха" проблема, като върнаха промяната). Това е IMO идеалното решение (V8Compatible нещата са отхвърлени).

Свързан проблем



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Разлика между две стойности за година, месец и ден в Oracle

  2. Oracle SQL за промяна на типа на колоната от число на varchar2, докато съдържа данни

  3. Добавете липсващи данни от предходния месец или година кумулативно

  4. Не може да се зареди DLL „OraOps10.dll“

  5. ... където count(col)> 1