2017-12-26 12 views
0

Ich suche nach einer Möglichkeit zu verhindern, dass Objekte mit Federdaten aktualisiert werden. Ich habe einige Themen dazu gefunden, aber keine von ihnen hat eine Lösung.Spring-data: Update verhindern

Ich habe ein Objekt, das erstellt und gelesen werden kann. Das ist es. Ich möchte keine Änderungen/Updates unterstützen. Ich verwalte/generiere die Datenbank-ID selbst.

Ich würde gerne org.springframework.data.repository.Repository Schnittstelle verwenden (oder JpaRepository/CrudRepository wenn ich irgendwie die <S extends T> S save(S entity); Logik Update zu verhindern, ändern kann), weil ich die saubere findBy ... Schnittstelle Notationen lieben.

Die beste Lösung, die ich bisher gefunden habe, ist Persistable zu implementieren und die isNew(…) zu überschreiben, um immer wahr zurückzukehren. Aber das ist einfach beschissen, denn das Objekt ist nicht "neu", wenn es schreibgeschützt ist.

Gibt es einen sauberen Weg, dies zu erreichen?

+0

hinzufügen 'aktualisierbar = false' zu ​​jedem Attribut des Unternehmens steht. Dann werden Aufrufe von 'update' ignoriert, da der JPA-Provider keine Änderungen feststellt. – manish

+0

Gut zu wissen, danke! Aber es löst mein Problem immer noch nicht (es wird es sogar noch schlimmer machen): Wenn ein Entwickler zum Beispiel eine Eigenschaft in einem Jahr hinzufügt, kann das Verhalten plötzlich chance. –

+0

Können Sie das Problem etwas besser erklären? Nehmen wir an, Sie haben eine Entität 'Foo' und das zugehörige Repository' FooRepository'. Möchtest du, dass 'FooRepository' keine' CUD'-Methoden (create, update, delete) hat (also nur Lese-Methoden), oder möchtest du, dass die Methoden dort sind, aber keine Wirkung haben, wenn sie aufgerufen werden? Es wird nützlich sein, wenn Sie die gewünschte Definition (welche Methoden Sie wollen) für 'FooRepository' zur Frage hinzufügen können. – manish

Antwort

0

Sie können zum Beispiel einfach Repository event handler Update zu beschränken verwenden und Operationen löschen:

@RepositoryEventHandler(MyEntity.class) 
public class MyEntityEventHandler { 

    @HandleBeforeSave 
    public void handleUpdate(MyEntity entity) { 
     throw new HttpRequestMethodNotSupportedException("Update") 
    } 

    @HandleBeforeDelete 
    public void handleDelete(MyEntity entity) { 
     throw new HttpRequestMethodNotSupportedException("Delete") 
    } 
} 
+0

Gibt es eine Alternative, die keine Federdatenruhe verwendet? –

+0

Ich dachte, Sie verwenden SDR ... Aber wenn Sie es nicht verwenden, implementieren Sie nicht einfach Update/löscht Controller-Methoden ... Oder brauchen Sie etwas anderes? – Cepr0

+0

Ich verwende spring-data-jpa, nicht spring-data-rest. Feder-Daten-Ruhe ist keine Option, da die Prinzipien genau das Gegenteil von dem sind, was wir erreichen wollen. spring-data-rest ist eine Ebene oberhalb von pring-data-jpa, die in einem ihrer Repositories den ' S save (S entity); –

Verwandte Themen