私は、Spring Data Neo4j 2.0 で単純なオブジェクト/グラフ マッピングを使用しています。ここでは、Spring Data リポジトリ フレームワークを使用して永続化操作を実行しています。Neo4jTemplate を使用するのではなく、リポジトリを使用しています。リポジトリを Spring Web MVC コントローラーに挿入すると、コントローラーはリポジトリを直接呼び出します。(中間サービス層はありません。私の操作は通常、CRUD とファインダー クエリです。)
読み取り操作を行う場合、問題はありません。しかし、書き込み操作を行うと、「NotInTransactionException」が発生します。私の理解では、Neo4j の読み取り操作はトランザクションを必要としませんが、書き込み操作は必要です。
単純な OGM に固執したい場合、ここで取引を把握するための最良の方法は何ですか? @Transactional を使用したいのですが、それをさまざまなリポジトリ インターフェイスに配置してもうまくいきません。コントローラーとリポジトリーの間に中間サービス層を導入し、サービス Bean に @Transactional のアノテーションを付けるとうまくいきますが、もっと簡単な方法はないかと考えています。Spring Data がなければ、通常は DAO (リポジトリ) 実装にアクセスできるため、パススルー サービス層を回避したい場合は、具体的な DAO に @Transactional でアノテーションを付けることができます。Spring Data では、リポジトリが動的に生成されるため、それはオプションではないようです。