2016-09-08 1 views
0

Meine Anwendung verwendet das View-Objekt-Entity-Paar für die Frontend-Backend-Interaktion. Das Frontend verwendet nur VOs, während das Backend nur Datenbank mit Entitäten redet. Und es gibt eine VO < -> Entities ConversionZeitstempel wird während des Ansichtsobjekts verloren -> Entitätskonvertierung

Meine Entity-Klasse verfügt über 2 Timestamp-Eigenschaften createTimestamp und lastUpdateTimestamp, die zwei nicht Nullable-Spalten in seiner Datentabelle entsprechen. Aber die VO hat niemals diese 2 Eigenschaften.

Mein aktuelles Problem: Da ein VO keine Timestamp-Eigenschaften enthält, wird die aus dem VO konvertierte Entität die 2 Timestamp-Eigenschaften null haben, und wenn ich diese Entitätsaktualisierung durchführe, tritt ein Fehler von der Datenbank auf Ich versuche, die Timestamp-Spalten auf Null zu setzen, was nicht erlaubt ist.

Ich möchte wissen, wie wir mit diesem Problem umgehen. Gibt es eine Möglichkeit, um diese 2 Timestamp bei der Aktualisierung in Datenbank zu machen, oder gibt es eine "elegante" Möglichkeit, die Timestamp Werte zu erhalten, bevor ich die Entity aktualisieren? Ich muss oft eine Liste von Entitäten auf einmal aktualisieren.


Lösung, die ich gefunden habe ich ein Attribut „aktualisierbar“ unter der @Column Anmerkung, und es scheint, mein Problem zu lösen. dh @Column (name = "CREATE_STAMP" nullable = false, aktualisierbare = false)

von diesem Posten Steuerspur Creation timestamp and last update timestamp with Hibernate and MySQL

Antwort

0

den Standardwert gegen die DB-Spalte für Zeitstempel-Spalten festlegen, dass, wenn in Mitteln die INSERT-Abfrage (über VO) wird es dauern, sonst wird es Standard sein.

Update: Sie können stattdessen einen Hibernate Interceptor verwenden, für den sie gedacht sind. Zum Beispiel können die Einheiten, die solche Felder brauchen die folgende Schnittstelle implementieren:

public interface Auditable { 
    Date getCreated(); 
    void setCreated(Date created); 
    Date getModified(); 
    void setModified(Date modified); 
} 

Dann wird der Interceptor immer setzt das geänderte Feld auf speichern und setzt nur die erzeugte Feld, wenn es nicht bereits eingestellt.

+0

Das funktioniert für die Erstellung des Datensatzes, aber ein DB-Trigger wäre für ein UPDATE erforderlich, so dass LASTUpdateTimestamp einen neuen Wert erhält. –

+0

@AndrewS hat den Punkt. Es ist das Update, das mich stört. – ChrisZ

+0

Überprüfen Sie die aktualisierte Antwort –

Verwandte Themen