Frage

Ich arbeite an einer JPA (Hibernate Implementierung), Frühling und Stripes Web-App. Ich habe eine Reihe von JPA-Entitäten, die die folgenden Felder gemeinsam für beide Audit und Abfrage Zwecke haben:

createdBy - die Benutzer-ID der Person, die das Unternehmen erstellt. CreatedOn - das Datum, das Unternehmen erstellt wurde updatedBy - die Benutzer-ID der Person, die zuletzt die Entität aktualisiert updatedOn - das Datum, das Unternehmen zuletzt aktualisiert wurde

Ich habe meine app bekam arbeiten, so dass CreatedOn und updatedOn werden automatisch eingestellt, wenn das Unternehmen beibehalten wird, aber ich bin nicht sicher, wie ich die createdBy und updatedBy Felder ausgefüllt bekommen können, ohne in Benutzer-ID durch den aktuell angemeldeten passieren zu müssen die ganze Weg von der Controller-Klasse zu dem DAOs.

Hat jemand irgendwelche Vorschläge, wie ich dies tun könnte Benutzer-IDs der ganzen Ort ohne den Weg? Beachten Sie, dass die aktuelle Benutzer-ID wird zur Zeit in dem Http Objekt gespeichert, so dass mein Backend muss irgendwie auf diese Daten zugreifen ...

Danke!

War es hilfreich?

Lösung 2

Ich habe entschieden, dass ein Thread ist wahrscheinlich der sauberste Weg, dies in meiner Anwendung zu tun.

Andere Tipps

Sie können an einem dieser Ansätze einen Blick die Benutzer-ID als Kontext in der Business-Schicht weitergeben müssen:

(Die Beiträge noch relevant sein können, auch wenn Sie nicht EJB verwenden. Die zweite Beitrag sinnvoll aber nur, wenn Sie den Frühling mit JTA verwenden)

ich entmutigen persönlich diese Vorgehensweise, wie ich sehe zwei Probleme mit sich:

  • Testbarkeit: Kontextdaten müssen im Test eingerichtet werden
  • Vertrag: Kontextdaten im Vertrag teilnehmen, um die Einheit zu verwenden, sind aber nicht eindeutig auf der Oberfläche sichtbar.

Passing userID „ganz über den Platz“ kann wie eine große Aufgabe sein, aber ich denke, es sauberer ist.

das Datum und die Benutzer-ID automatisch einzustellen, wenn Unternehmen erstellt oder zu aktualisieren, können Sie ein EntityListener oder Lifecycle-Rückrufe (vielleicht sind Sie bereits tun das). Hoffe, es hilft ...

ich eine Klasse wie folgt erstellen würde:


@MappedSuperclass
public abstract class AuditableDomainClass {
  private long createdBy;
  private long updatedBy;

  //getters and setters

Ihre Entitätsklassen, dass die Anforderung, die Sie beschrieben haben haben würde einfach diese Klasse erweitern, würden Sie Sie Variablen in der Schicht einstellen, dass Sie (Controller zum Beispiel) benötigen und Sie müssen nicht über den ganzen Weg zur Sorge nach unten in dem DAOs.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top