Oracle
 sql >> Datenbank >  >> RDS >> Oracle

JPA 2.0 Oracle DATE hat eine Nullzeit

Bei dieser Art von Problemen hilft es normalerweise, die Version des JDBC-Treibers und den verwendeten Dialekt anzugeben.

Wie auch immer, nach meinem Verständnis möchten Sie eigentlich die folgende Zuordnung (für DATE und ZEIT):

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

Und das Problem, dem Sie gegenüberstehen, hängt irgendwie mit dem Wahnsinn zusammen, der von Oracle mit Version 9.2 eingeführt wurde, siehe Was passiert mit DATE und TIMESTAMP? (Kurz gesagt, sie haben einen TIMESTAMP eingeführt Spalte und änderte die Zuordnung des DATE SQL-Typ, lesen Sie die FAQ). Es gibt mehrere Möglichkeiten, es zu lösen (ich gehe natürlich davon aus, dass Sie einen TemporalType.TIMESTAMP verwenden Zuordnung):

Verwenden Sie entweder einen TIMESTAMP Spaltentyp (Ich meine nicht TemporalType.TIMESTAMP hier meine ich wirklich den Spaltentyp auf der DB-Seite). Wenn Sie jedoch keine Nanosekunden-Präzision benötigen, ist dies nicht die beste Wahl.

Oder setzen Sie oracle.jdbc.V8Compatible=true Kompatibilitätsmodus, entweder als Systemeigenschaft oder als Verbindungseigenschaft:

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

Ja, Sie können beliebige Verbindungseigenschaften wie folgt festlegen. Aus der Hibernate-Dokumentation:

Oder verwenden Sie den Oracle JDBC 11.1-Treiber (sie haben das Problem "behoben", indem sie die Änderung rückgängig gemacht haben). Dies ist IMO die ideale Lösung (die V8Compatible Zeug ist veraltet).

Verwandtes Problem