简体   繁体   English

我们如何使用jdbi强制Dropwizard中的资源(控制器)级别事务?

[英]How do we force Resource(controller) level transaction in Dropwizard with jdbi?

In spring, we have @Transactional annotation which can be specified at Controller, so everything happens inside a controller method is treated as one transaction. 在Spring中,我们有@Transactional注释,可以在Controller中指定,因此控制器方法内部发生的一切都被视为一个事务。 However in dropwizard, we can have transaction at a DAO level by implementing Transactional<DAOclass> . 但是在dropwizard中,我们可以通过实现Transactional<DAOclass>来实现DAO级别的Transactional<DAOclass> But if I use two DAOs in a single resource method, it is treated as two different transactions. 但是,如果我在单个资源方法中使用两个DAO,则将其视为两个不同的事务。

Say I have two DAOs 说我有两个DAO

Dao1.java Dao1.java

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

Dao2.java Dao2.java

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

ArticleResource.java 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();
    }
}

In the above example, dao1 and dao2 have two different transactions. 在上面的例子中,dao1和dao2有两个不同的事务。 But I need everthing under a single transaction So is there any way of specifying transactional boundaries at Resource level? 但是我需要在单个事务下进行翻转所以有没有办法在资源级别指定事务边界?

Have a look at this post https://groups.google.com/forum/#!topic/jdbi/O5rxzwmlwjM 看看这篇文章https://groups.google.com/forum/#!topic/jdbi/O5rxzwmlwjM

@CreateSqlObject seems to be the answer. @CreateSqlObject似乎就是答案。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM