Untuk masalah seperti ini, biasanya membantu menyediakan versi driver JDBC dan dialek yang Anda gunakan.
Bagaimanapun, pemahaman saya adalah bahwa Anda sebenarnya menginginkan pemetaan berikut (untuk DATE dan WAKTU):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
Dan masalah yang Anda hadapi entah bagaimana terkait dengan kegilaan yang diperkenalkan oleh Oracle dengan versi 9.2, lihat Apa yang terjadi dengan DATE dan TIMESTAMP?
(singkatnya, mereka memperkenalkan TIMESTAMP
kolom dan mengubah pemetaan DATE
Jenis SQL, baca FAQ). Ada beberapa opsi untuk menyelesaikannya (tentu saja saya berasumsi Anda menggunakan TemporalType.TIMESTAMP
pemetaan):
Gunakan TIMESTAMP
jenis kolom (Maksud saya bukan TemporalType.TIMESTAMP
di sini, maksud saya tipe kolom di sisi DB). Tetapi jika Anda tidak membutuhkan presisi nanodetik, ini bukan pilihan terbaik.
Atau atur oracle.jdbc.V8Compatible=true
mode kompatibilitas, baik sebagai properti sistem atau sebagai properti koneksi:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Ya, Anda dapat mengatur properti koneksi sewenang-wenang seperti ini. Dari dokumentasi Hibernate:
Atau gunakan driver Oracle JDBC 11.1 (mereka "memperbaiki" masalah dengan mengembalikan perubahan). Ini adalah IMO solusi ideal (V8Compatible
barang sudah tidak digunakan lagi).