6

Spring@Transactionalでは Controller で指定できる Annotation があるので、Controller メソッド内で起こることはすべて 1 つのトランザクションとして扱われます。しかし、dropwizard では を実装することで、DAO レベルでトランザクションを持つことができますTransactional<DAOclass>。しかし、1 つのリソース メソッドで 2 つの DAO を使用すると、2 つの異なるトランザクションとして扱われます。

2 つの DAO があるとします。

Dao1.java

   public abstract class Dao1 implements Transactional<Dao1>{
    @sqlQuery(//somequery)
    public abstract void insertIntoArticles();
   }

Dao2.java

   public abstract class Dao2 implements Transactional<Dao2>{
    @sqlQuery(//somequery)
    public abstract void insertIntoArticlesChildren();
   }

ArticleResource.java

    @POST
    @PATH("/articles")
    public void insertArticleAndItsChildren(Integer articleId){
     try{
       dao1.begin();
       dao2.begin();
       dao1.insertIntoArticles();
       dao2.insertIntoArticlesChildren();
       dao1.commit();
       dao2.commit();   
    }catch(Exception e){
     dao1.rollback();
     dao2.rollback();
    }
}

上記の例では、dao1 と dao2 に 2 つの異なるトランザクションがあります。しかし、単一のトランザクションの下ですべてが必要なので、リソースレベルでトランザクションの境界を指定する方法はありますか?

4

1 に答える 1

3

この投稿をご覧ください https://groups.google.com/forum/#!topic/jdbi/O5rxzwmlwjM

@CreateSqlObject が答えのようです。

于 2014-05-25T20:37:21.600 に答える