Đối với loại sự cố này, việc cung cấp phiên bản trình điều khiển JDBC và phương ngữ bạn đang sử dụng thường hữu ích.
Dù sao, tôi hiểu là bạn thực sự muốn ánh xạ sau (cho DATE và THỜI GIAN):
@Column(name = "READING_DATE")
@Temporal(TemporalType.TIMESTAMP)
private Date readingDate;
Và vấn đề bạn đang gặp phải bằng cách nào đó liên quan đến sự điên rồ được Oracle giới thiệu với phiên bản 9.2, hãy xem Điều gì đang xảy ra với DATE và TIMESTAMP?
(nói tóm lại, họ đã giới thiệu TIMESTAMP
và thay đổi ánh xạ của DATE
Kiểu SQL, đọc Câu hỏi thường gặp). Có một số tùy chọn để giải quyết nó (tất nhiên tôi giả sử bạn đang sử dụng TemporalType.TIMESTAMP
ánh xạ):
Sử dụng TIMESTAMP
loại cột (Ý tôi không phải là TemporalType.TIMESTAMP
ở đây, tôi thực sự có nghĩa là loại cột ở phía DB). Nhưng nếu bạn không cần độ chính xác nano giây, đây không phải là lựa chọn tốt nhất.
Hoặc đặt oracle.jdbc.V8Compatible=true
chế độ tương thích, dưới dạng thuộc tính hệ thống hoặc thuộc tính kết nối:
<property name="hibernate.connection.oracle.jdbc.V8Compatible">true</property>
Có, bạn có thể đặt các thuộc tính kết nối tùy ý như thế này. Từ tài liệu Hibernate:
Hoặc sử dụng trình điều khiển Oracle JDBC 11.1 (họ đã "khắc phục" sự cố bằng cách hoàn nguyên thay đổi). Đây là giải pháp lý tưởng cho IMO (V8Compatible
thứ không được dùng nữa).