2012-03-31 3 views
1

Suchen Sie nach Vorschlägen für eine effiziente Methode zum Verwalten grundlegender Prüffelder für Entitäten in AppEngine für Java (über objectify). Das @ PrePersist-Attribut sieht für verschiedene Datumsfelder (dateCreated, dateModified, dateDeleted) wie eine gute Option aus, aber ich möchte auch die ID des Benutzers speichern, der die Entität erstellt, geändert und gelöscht hat. Ist dies der Datenzugriffsschicht am besten überlassen?Prüffelder für AppEngine-Entitäten

Antwort

1

Wenn Sie Datensätze mit mehr als nur den angegebenen Daten speichern möchten, möchten Sie wahrscheinlich ein Überwachungsobjekt erstellen und @Embed verwenden, um es in den Objekten zu speichern, die Sie überwachen. Verwenden Sie dann @PrePersist, um dieses Objekt zu aktualisieren. Dadurch erhalten Sie ein konsistentes Audit-Framework für alle Objekte.

+0

Wenn ich \ @PrePersist verwende, wie bekomme ich die Benutzer-ID? Der einzige Weg, auf den wir zugreifen müssen, ist über einen Benutzerabrufservice, der ihn von der HttpSession abruft. Ist es üblich, Dienste in Domain-Entitäten einzubinden, um diese Informationen zu erhalten? –

+0

Ja. Sie können es entweder von der Sitzung abrufen oder von einem Cookie lesen. Das hängt ganz von Ihrer Anwendung ab. Im Allgemeinen hat die DAO-Ebene Ihrer Anwendung eine Methode wie doUpdate (User, Entity) –

+0

Wir haben eine DAO-Ebene, aber ich bin mir nicht sicher, ob mir die Idee gefällt, den Benutzer an jede doUpdate-Methode zu übergeben. Sollte die DAO-Schicht nicht wissen, wie das geht? –

0

IMHO @PrePersist ist ein guter Ort, um dies durchzuführen.

Sie könnten auch objectify's polymorphism verwenden - auf diese Weise könnten Sie eine Basisklasse mit allen Audit-Feldern haben und speichern. Dann würden alle Klassen, die geprüft werden müssen, diese Basisklasse erweitern.