2017-04-27 11 views
1

documentを傍受または変更する方法はありますか?MongoRepository.save(e)はそれを更新しますか?Mongorepository.save(ドキュメント)のデフォルトの動作を変更または上書きする

サブプロパティをドキュメント内にプッシュしようとしています。私はDBObjectsconverter(カスタムコンバータを使用して)を実装して操作しようとしましたが、$push操作はそこでは機能しませんでした。

私はそれは私がMongoRepositorysave(document)の部分更新をサポートしていない、すなわち、既存の文書への変更のみを記述したmongoOperation.update(dbObjectMatch,dbObjectUdate).

のようなものを実装する必要が動作するように思います。私はMongoRepository.saveの内部コードを知り、デフォルトの動作を変更したいと思っています。

私はMongoRepository<T, ID extends Serializable>を拡張して、私が探していますが、私は満足していないものを達成するためにmongoTemplate.updateFirst(query,update,Clazz.class)を使用した、MyRepositoryで同じことを拡張することによりsaveを上書きすることができますどこでMyRepositoryCustom実施しています。

答えて

3

ます複数、わずかに異なる質問があります。

Mongorepository保存()(S保存(S VAR1))の変更/上書きデフォルト動作方法

:あなたのタイトルから

カスタム実装を使用して、Springデータリポジトリの既存のメソッドの動作をオーバーライドすることができます。それを行う方法はthe reference documentationを参照してください。あなたの最後の段落は、すでにあなたがそれを示唆しています。残念ながら、なぜあなたがこれに満足していないのかを教えてもらえません。

Mongorepository Save()(S save(S var1))メソッドの前に傍受/変更する方法はありますか。

はいSpringデータMongoDBリポジトリは、この目的のためにさまざまなライフサイクルイベントを発生させます。再び、see the reference documentation for details

私は何を探してるんですかMongorepository保存

の内部コードを知りたいあなたはLifecycle Eventsを探しているMongoTemplate.java

+0

こんにちは、Jens Schauder私の主な問題は、既存のエントリの部分的な更新を行いたいということです。 'MongoRepository'更新メソッドがオブジェクト全体を書き換えています。私はhttp://stackoverflow.com/questions/43510093/spring-data-mongodb-adding-arrays-to-an-existing-documentの正確なシナリオを持っています。あなたの解決策を期待しています – user5685250

+0

私は 'save'メソッド* – user5685250

+0

とは全く違う質問です。あなた自身を書くときは重複してください。 –

2

ほぼすべての作業のためのデリゲートSimpleMongoRepository.javaです。

リポジトリベースメソッドをオーバーライドすると、ドメインオブジェクト自体と対話できますが、マッピングはMappingMongoConverterの内部で行われます。

保存対象は、これらのイベントが保存されたオブジェクトへの参照を運ぶように

などのイベントを発生させます。 AfterConvertEventは、オブジェクトのマッピング表現(DBObject)を追加/変更して公開します。

ApplicationListener<AfterConvertEvent>のようなリスナーBeanを構成することで、これらのイベントを聴くことができます。

+0

'AbstractMongoEventListener 'は私の問題を解決できませんでした。なぜなら、 'onBeforeSave'または' onBeforeConvert'は 'DBObject'へのアクセスを提供し、部分更新をしたいだけなので、' AbstractMongoEventListener'はここでは機能しません。 'onBeforeSave'メソッドからsaveを呼び出して、' StackOverflowError'(これは明らかです)で終わりました。 – user5685250

関連する問題