在 Spring ,我们可以在Controller处指定@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具有两个不同的事务。但是我只需要一笔交易就可以了
那么,有什么方法可以在资源级别指定事务边界?
最佳答案
看看这个帖子https://groups.google.com/forum/#!topic/jdbi/O5rxzwmlwjM
@CreateSqlObject似乎是答案。