In meiner SQL Server 2000-Datenbank habe ich eine Zeitmarke (in Funktion, nicht im Datentyp) Spalte des Typs mit dem Namen lastTouched
als Standardwert/Bindung auf getdate()
festgelegt.Einstellen einer JPA-Zeitstempelspalte, die von der Datenbank generiert werden soll?
Ich verwende die Netbeans 6.5 JPA Entitätsklassen erzeugt, und haben dies in meinem Code
@Basic(optional = false)
@Column(name = "LastTouched")
@Temporal(TemporalType.TIMESTAMP)
private Date lastTouched;
Allerdings, wenn ich versuchen, das Objekt in die Datenbank habe ich bekommen,
javax.persistence.PersistenceException: org.hibernate.PropertyValueException: not-null property references a null or transient value: com.generic.Stuff.lastTouched
I habe versucht Einstellung @Basic
auf zu setzen, aber das wirft eine Ausnahme, die besagt, dass die Datenbank keine null
Werte für die TIMESTAMP
Spalte zulässt, die es nicht von Entwurf macht.
ERROR JDBCExceptionReporter - Cannot insert the value NULL into column 'LastTouched', table 'DatabaseName.dbo.Stuff'; column does not allow nulls. INSERT fails.
Ich habe vorher diese in reinen Hibernate zu arbeiten, aber ich habe zu JPA Sinn umgeschaltet und haben keine Ahnung, wie es zu sagen, dass diese Spalte auf der Seite Datenbank erzeugt werden annehmen wird. Beachten Sie, dass ich immer noch Hibernate als meine JPA-Persistenzschicht verwende.
Sie können auch @Column (name = "LastTouched", einführbar = false, aktualisierbare = false) hinzufügen Datenbank Zeitstempel erzeugt auch Anweisungen mit SQL UPDATE zu verwenden. –
Danke Juha. Ich bin sicher, das hätte mich später auf der Straße durcheinander gebracht. –
Eigentlich denke ich darüber nach, ich werde die Spalte Update benötigen, da ich sie über Java aktualisieren muss, wenn ich Spaltenänderungen mache. Es sei denn, es gibt eine Möglichkeit, die Spaltenaktualisierung auf der Datenbankseite irgendwie durchzuführen. –