Trong cơ sở dữ liệu SQL Server 2000 của tôi, tôi có cột dấu thời gian (trong hàm không có trong kiểu dữ liệu) thuộc loại DATETIME
có tên lastTouched
đặt thành getdate()
làm giá trị/ràng buộc mặc định của nó.Đặt cột dấu thời gian JPA được cơ sở dữ liệu tạo ra?
Tôi đang sử dụng Netbeans 6.5 tạo ra các lớp thực thể JPA, và có điều này trong mã của tôi
@Basic(optional = false)
@Column(name = "LastTouched")
@Temporal(TemporalType.TIMESTAMP)
private Date lastTouched;
Tuy nhiên khi tôi cố gắng để đưa các đối tượng vào cơ sở dữ liệu tôi nhận được,
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.generic.Stuff.lastTouched
tôi đã cố gắng thiết lập thiết lập @Basic
thành (optional = true)
, nhưng điều đó cho phép ngoại lệ nói rằng cơ sở dữ liệu không cho phép các giá trị null
cho cột TIMESTAMP
, mà nó không theo thiết kế.
ERROR JDBCExceptionReporter - Cannot insert the value NULL into column 'LastTouched', table 'DatabaseName.dbo.Stuff'; column does not allow nulls. INSERT fails.
trước đây tôi đã làm việc này trong Hibernate tinh khiết, nhưng tôi đã cảm giác chuyển sang JPA và không có ý tưởng làm thế nào để nói với nó rằng cột này là giả sử để được tạo ra về phía cơ sở dữ liệu. Lưu ý rằng tôi vẫn đang sử dụng Hibernate làm lớp kiên trì JPA của tôi.
Bạn cũng có thể muốn thêm @column (name = "LastTouched", insertable = false, có thể cập nhật = false) sử dụng cơ sở dữ liệu được tạo ra timestamps cũng với câu lệnh SQL UPDATE. –
Cảm ơn Juha. Tôi chắc rằng điều đó sẽ làm tôi rối tung sau đó. –
Trên thực tế, suy nghĩ về nó nhiều hơn, tôi nghĩ rằng tôi sẽ cần cột cập nhật, vì tôi sẽ cần phải cập nhật nó thông qua Java khi tôi thực hiện thay đổi cột. Trừ khi có một cách để thực hiện cập nhật cột ở phía cơ sở dữ liệu bằng cách nào đó. –