Wir haben Ihre standardmäßige Java-App in der Entwicklung, und viele der Datensätze, die wir erstellen (Hibernate-Entitäten in MySQL), haben Zeitstempel auf ihnen "erstellt" und "modifiziert".
Nun, ich und einer der Entwickler stimmen nicht zu - ich glaube, dass beide Felder einen MySQL-Standard von CURRENT_TIMESTAMP haben sollten, und dann kann der modifizierte von der App geändert werden. Er möchte beide von der App verwaltet werden.
Gibt es einen zwingenden Grund für beide Entscheidungen? Ich kann nicht verstehen, warum Sie dem Code explizitere Schritte hinzufügen möchten, es sei denn, Sie hatten Bedenken, dass Ihre Server (db, Anwendung) inkonsistente Zeitstempel haben.
Wenn keines dieser Argumente zutrifft, verwenden Sie das, das für Sie einfacher ist (oder dasjenige, für das mehr Entwickler wählen)
Wenn Sie sich für die Anwendungsbehandlung entscheiden, gehen Sie entweder zu Pascal Thivents Vorschlag mit @PreUpdate
oder lassen Sie Ihr Feld mit einem Standardwert wie:
Es ist sinnvoll, alle Zeitstempel in der gleichen Ebene für Konsistenz zu reservieren.
Diese Antwort zu einer verwandten Frage gibt ein schönes Beispiel, wie man es in Hibernate macht.
Ich würde das aus dem Code behandeln und Hibernate / JPAs @PrePersist
Hauptgrund: Portabilität (d. h. dies funktioniert mit einer anderen Datenbank, z. B. in einem Testkontext, ohne Datenbankmagie, keine DEFAULT
, kein Trigger, nichts).