2016-11-28 5 views
1

SDN(4.2.0.M1)とneo4j-ogm(2.0.5)のバージョンを最新のスナップショット4.2.0.BUILD-SNAPSHOT2.1.0-SNAPSHOTにアップグレードしようとしています。4.2へのSDN移行:@Transactionalはどのように機能しますか?

他のSOの質問からのアドバイスといくつかのアドバイスを受けて、neo4j セッションと対話するすべてのメソッドを@Transactionalにラップしました。ほとんどのケースでうまくいきますが、まだ理解できない例外がいくつかあります(Transaction is not current for this thread)。

私が例挙げてみましょう:それはSDNと直接使う対話するだけだから、

@Service 
public class ContactServiceImpl implements ContactService { 

    @Inject 
    private Session session; 

    //... 

    @Override 
    @Transactional 
    public void addContact(String userId, String contactId) { 
     Contact contact = new Contact(); 
     // Fill contact data 

     session.save(contact); 
    } 

    @Override 
    public void addContacts(String userId, Set<User> newContacts) { 
     for (User contact : CollectionUtils.emptyIfNull(newContacts)) { 
      addContact(userId, contact.getId()); 
     } 
    } 
} 
ここ

私だけ@TransactionaddContact方法で注釈を付けてきたが、少なくともこの私の考え:)

ました

しかし、単にリストを反復し、注釈付きaddContactメソッドを呼び出すaddContactsメソッドを呼び出すと、前述の例外が発生して失敗します。私もこの方法に注釈をつけても、うまくいきますが、なぜそれが理解できません。たぶん私は春についてのいくつかの基本が不足している@Transactional注釈の動作、それはごめんなさい脳のない質問です。

誰も私が両方の方法に注釈を付ける必要があることを明確にすることはできますか? 事前に感謝します

答えて

1

@Transactionalほとんどの人が考えるよりも少し複雑です。実際にはうまくいかないように見えますが、その逆もあります。

あなたのケースでは、非友好的な春の問題をヒットしています。同じクラス内からトランザクションメソッドを呼び出すときに@Transactional AOPのプロキシ処理がどのように機能するかを理解していません。

This snippet from the official documenationは、Springのトランザクションプロキシの基本について大まかに説明するのに適しています。

StackOverflowのクイック検索では、私にはthis answerが届いています。これは、あなたが見ている現象を説明する素晴らしい仕事です。

注:バージョン4.2から、SDNはSpring Transaction Platformを完全に実装しました。

+0

詳細を追加する必要がある場合は、コメントを追加し、私は私の答えを拡大します。 – digx1

+0

ありがとう@ digx1!問題を尋ねる前にもう少し調べたことがありますが、問題がSDNの移行に関連する可能性があることは当然のことでした。私の誤り:)両方のリンクに感謝します。 – troig

関連する問題