【问题标题】:How do we force Resource(controller) level transaction in Dropwizard with jdbi?我们如何使用 jdbi 在 Dropwizard 中强制资源(控制器)级别的事务?
【发布时间】:2014-07-13 19:55:44
【问题描述】:

在 Spring 中,我们有 @Transactional 注释,可以在 Controller 中指定,因此在控制器方法中发生的所有事情都被视为一个事务。 但是在 dropwizard 中,我们可以通过实现Transactional<DAOclass> 在 DAO 级别进行事务。但如果我在一个资源方法中使用两个 DAO,它会被视为两个不同的事务。

假设我有两个 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 有两个不同的事务。但我需要单笔交易 那么有没有办法在资源级别指定事务边界?

【问题讨论】:

    标签: java transactions dao dropwizard jdbi


    【解决方案1】:

    看看这个帖子https://groups.google.com/forum/#!topic/jdbi/O5rxzwmlwjM

    @CreateSqlObject 似乎是答案。

    【讨论】:

      猜你喜欢
      • 2016-06-05
      • 2017-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-18
      相关资源
      最近更新 更多