Federdatenruhe - Soft-Löschen

8

Ich habe Spring Data Rest ohne Problem verwendet, aber jetzt habe ich eine Anforderung, dass, wenn ein Benutzer eine DELETE-Operation für eine bestimmte Entität durchführt, zB DELETE /accounts/<id> Ich muss ein Flag in der Datenbank setzen, die diese Entität als gelöscht markiert aber ich möchte die Aufzeichnung behalten .

Grundsätzlich bedeutet dies, dass ich eine UPDATE anstelle einer DELETE-Operation in der Datenbank durchführen muss. Ich finde keine Möglichkeit, das Federverhalten für die Lösch (ID) -Methode zu überschreiben.

Irgendein Code:

%Vor%

Konto-Repository

%Vor%

Irgendwelche Ideen?

    
ejoncas 11.09.2015, 03:09
quelle

2 Antworten

4

Sie würden versuchen, ein benutzerdefiniertes Repository zu erstellen, um zu sehen, wie es ablaufen würde

Ссылка

Aber Löschen ist nicht der einzige Ort, an dem Sie Ihre Logik ändern müssen. Ich sehe 2 Möglichkeiten, um Flag-Anforderung zu behandeln:

  1. Lassen Sie in Ihrer Entitätsdefinition ein zusätzliches Flag anzeigen und aktualisieren Sie es unter Löschen.

    In diesem Fall müssen Sie vorsichtig sein und alle vorhandenen Abfragen neu schreiben, um sicherzustellen, dass entfernte Entitäten nicht zurückgegeben werden, und beachten Sie diese Trennung der Ergebnisse für alle zukünftigen Entitäten. (Obwohl Sie SpringData auf niedriger Ebene hacken und dieses Flag automatisch anhängen können).

  2. Löschen Sie die Entität aus der ursprünglichen Sammlung und fügen Sie sie einer anderen Sammlung hinzu, in der Entitäten vor der vollständigen Entsorgung gespeichert werden.

    In diesem Fall benötigen Sie eine zusätzliche Logik zum Verwalten von Entsorgungssammlungen, dies hat jedoch keine Auswirkungen auf die Abfragelogik. Sie können Ihre vorhandene Anwendung integrieren, indem Sie Ihrer JPA-Definition den Entity-Listener hinzufügen ( Ссылка )

mavarazy 11.09.2015, 05:52
quelle
0

Ich denke, zuerst sollten Sie eine Schnittstelle verwenden, um nur die Entitäten zu identifizieren, die das weiche Löschen verwenden. Danach können Sie die Löschmethode überschreiben. Wenn die Entität eine Instanz dieser Schnittstelle ist, setzen Sie das gelöschte Flag auf "true" und rufen Sie die Aktualisierung auf, andernfalls rufen Sie die Superimplementierung auf. Verwenden Sie SimpleJpaRepository anstelle von JpaRepository. Beispiel für Schnittstellen Ссылка finden Sie hier (Persistent und DefaultPersistent)

    
Daniel Jipa 11.09.2015 04:36
quelle