2017-12-26 34 views
0

私はスプリングデータでオブジェクトが更新されないようにする方法を探しています。私はこれについていくつかの話題を見つけましたが、どれも解決策はありません。スプリングデータ:更新を防止する

私は作成して読むことができるオブジェクトを持っています。それでおしまい。私は修正/更新をサポートしたくありません。私は自分自身でデータベースIDを管理/生成します。

私はクリーンなfindBy ...インターフェイスの表記を愛しているから、私は、(私は何とか更新を防ぐために<S extends T> S save(S entity);ロジックを変更できるかどうかJpaRepository/CrudRepositoryorg.springframework.data.repository.Repositoryインタフェースを使用するのが大好きです。

私が今までに見つけた最良の解決策は、Persistableを実装し、常にtrueを返すようにisNew(…)を上書きすることです。しかし、読み込み専用のオブジェクトは「新」ではないので、これはちょっと気が間違いです。

これを達成するためのクリーンな方法はありますか?

あなたは、例えば、単純に更新を制限し、操作を削除するために Repository event handlerを使用することができます
+0

'エンティティのすべての属性に更新可能な= false'のを追加します。 JPAプロバイダは変更を検出しないので、 'update'の呼び出しは無視されます。 – manish

+0

ご存知ですか、ありがとう!しかし、それはまだ私の問題を解決しません(それはさらに悪化させるでしょう):たとえば、開発者が1年でプロパティを追加する場合、その動作は突然の可能性があります。 –

+0

問題を少し詳しく説明できますか?エンティティ 'Foo'とその関連リポジトリ' FooRepository'を持っているとしましょう。 'FooRepository'に' CUD'(作成、更新、削除)メソッドを持たせたい(つまり、メソッドを読み込むだけです)か、メソッドをそこに入れたいのですが、呼び出されても何の効果もありませんか? 'FooRepository'の望みの定義(あなたが望むメソッド)を質問に追加することができれば便利です。 – manish

答えて

0

@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

spring-data-restを使用しない代替手段はありますか? –

+0

私はあなたがSDRを使っていると思っています...しかし、あなたがそれを使っていないのであれば、更新/削除コントローラメソッドを実装していません。 – Cepr0

+0

私はspring-data-restではなく、spring-data-jpaを使用しています。春のデータ休憩はオプションではありません。なぜなら、原則は私たちが達成したいのとは全く反対であるからです。 spring-data-restは、任意のリポジトリに ' S save(Sエンティティ);を持つpring-data-jpaの上にあるレイヤです。 –

関連する問題