5

私はSpring Data Neo4j 2.0で単純なオブジェクト/グラフマッピングを使用しています。ここでは、Spring Dataリポジトリフレームワークを使用して永続操作を実行します。私はNeo4jTemplateで作業するのではなく、リポジトリに取り組んでいます。私はSpring Web MVCコントローラにリポジトリを注入し、コントローラはリポジトリを直接呼び出します。 (中間サービス層なし - 私の操作は一般的にCRUDとファインダークエリです)。Spring Data Neo4jの単純なオブジェクト/グラフマッピングを使用してトランザクションを取得する正しい方法ですか?

私は読み取り操作を行うときに問題はありません。しかし、私が書き込み操作を行うと、私は "NotInTransactionException"を取得します。私の理解では、Neo4jの読み取り操作はトランザクションを必要としませんが、書き込み操作は実行します。

私は単純なOGMに固執したいと仮定して、ここに画像を取り込む最良の方法は何ですか? @Transactionalを使いたいと思っていますが、これをさまざまなリポジトリインターフェースに置くことはできません。コントローラーとリポジトリーの中間に中間のサービス層を導入し、@TransactionalでサービスBeanに注釈を付けると、機能しますが、もっと簡単な方法があるかどうかは疑問です。 Spring Dataがなければ、私は通常、DAO(リポジトリ)の実装にアクセスできるので、パススルーサービス層を避けたい場合は、具体的なDAOに@Transactionalを注釈することができます。 Springデータでは、reposは動的に生成されるため、オプションではないようです。

+1

@リポジトリのトランザクション - インタフェースが動作するはずです。 –

答えて

6

まず、トランザクション型DAOを使用することは、一般的には良い方法ではないことに注意してください。しかし、サービス層がない場合は、DAO上に置くようにしてください。

次に、宣言型トランザクションを有効にすることができます。ここで私はそれをやった方法は次のとおりです。

まず、注釈を定義@GraphTransactionalと呼ばれる:

@Retention(RetentionPolicy.RUNTIME) 
@Transactional("neo4jTransactionManager") 
public @interface GraphTransactional { 

} 

更新:あなたは新しいを作成するのではなく、それを再利用することができますので、そのような注釈を春・データのNeo4jを追加しているが1:次に@Neo4jTransactional

applicationContext.xmlで、次ている(neo4jdbがあなたのEmbeddedGraphDatabaseです):

<bean id="neo4jTransactionManagerService" 
    class="org.neo4j.kernel.impl.transaction.SpringTransactionManager"> 
    <constructor-arg ref="neo4jdb" /> 
</bean> 
<bean id="neo4jUserTransactionService" class="org.neo4j.kernel.impl.transaction.UserTransactionImpl"> 
    <constructor-arg ref="neo4jdb" /> 
</bean> 

<bean id="neo4jTransactionManager" 
    class="org.springframework.transaction.jta.JtaTransactionManager"> 
    <property name="transactionManager" ref="neo4jTransactionManagerService" /> 
    <property name="userTransaction" ref="neo4jUserTransactionService" /> 
</bean> 

<tx:annotation-driven transaction-manager="neo4jTransactionManager" /> 

別のトランザクションマネージャを使用する場合は、このアノテーション駆動型定義にはorder="2"を指定する必要があります。また、もしあれば、2フェーズコミットがないことに注意してくださいSQLとneo4jの両方のトランザクションとして宣言されています。

+4

既に@ Neo4jTransactionalがあります。 –

+3

はすでに説明した方法でトランザクションマネージャを設定しています。 –

+2

ありがとう、私は更新プログラムを追加しました。注釈は以前のバージョンにはありませんでした:) – Bozho

関連する問題