Tôi gặp vấn đề về quản lý ngày tháng bằng mili giây. Tôi hiểu nhu cầu sử dụng các dấu thời gian để lưu trữ mili giây:Làm thế nào để sử dụng java.sql.Timestamp như java.util.Date thực với JPA
@Temporal(TIMESTAMP)
@Column(name="DATE_COLUMN", nullable = false)
@Override public java.util.Date getDate() { return this.date; }
Nhưng nếu tôi không thể so sánh ngày này sang một thể hiện của java.util.Date, trừ khi tôi chú ý đến thứ tự của equals() gọi , bởi vì this.date
thể hiện là một java.sql.Timestamp. Làm thế nào để có được một java.util.Date từ JPA? Bởi vì ngày xuất phát từ JPA, ngay cả khi chữ ký phương thức là một java.util.Date thực sự là một cá thể của java.sql.Timestamp.
java.util.Date newDate = new Date(this.date.getTime());
this.date.equals(newDate) == false
newDate.equals(this.date) == true
Tôi đã cố gắng để thay đổi phương pháp của tôi trong lớp kiên trì:
@Override
public Date getDate() {
return this.date == null ? null : new Date(this.date.getTime());
}
Đó là làm việc, nhưng nó không hiệu quả với rất nhiều dữ liệu.
Có những lựa chọn khác:
tôi có thể thay đổi thiết kế của lớp kiên trì của tôi, sử dụng
@PostLoad
để tạo ra một java.util.Date từ ngày persited sau khi tôi lấy nó.Tôi tự hỏi nếu tôi không thể nhận được kết quả bằng cách sử dụng
ClassTransformer
?
Bạn đã từng phải đối mặt với vấn đề này chưa? Những gì tôi không chính xác? Cách tốt nhất để xử lý vấn đề này là gì?
Tôi vừa có một phiên bản rất khó chịu về vấn đề này, nơi điều này đã làm hỏng sự so sánh muối của Spring Security. Rõ ràng bằng cách sử dụng một phiên bản ngày sql.timestamp cho muối ám một kết quả khác nhau hơn bằng cách sử dụng một util.Date – Marc