Весной у нас есть аннотация @Transactional
, которую можно указать в контроллере, поэтому все, что происходит внутри метода контроллера, рассматривается как одна транзакция. Однако в dropwizard мы можем иметь транзакцию на уровне DAO, реализовав Transactional<DAOclass>
. Но если я использую два 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();
}
СтатьяResource.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 имеют две разные транзакции. Но мне нужно все в рамках одной транзакции. Так есть ли способ указать границы транзакций на уровне ресурсов?