2014-10-16 95 views
2

我在我的资源中有批量创建用户的方法。 我使用@UnitOfWork注释了我的资源方法,但是我对此操作的具体服务方法也进行了注释,因为只有部分用户保存时的情况对我来说是okey。Dropwizard嵌套事务

总结我有主事务,并且许多嵌套事务需要单独保存用户。

我注意到当我的资源方法没有用@UnitOfWork和我的服务BulkSave方法进行注释时,dropwizard无法开始事务。从逻辑的角度来看,这应该工作,但不工作。

我尝试使用@UnitOfWork设置刷新模式,首先将FlushMode设置为手动,这几乎是完美的。当嵌套事务回滚时,主事务可以被提交,这是很好的解决方案。 但是这个解决方案并没有我想象的那么好。使用级联保存相关实体不起作用!

最后,我有相关的实体,其不保存,或在主交易错误时,嵌套事务回滚是(发生异常后不要冲洗会议)

人有类似的情况或了解更多关于会议Dropwizard中的管理?

回答

2

@UnitOfWork仅注册为资源方法。所以注释你的服务方法是行不通的。

相反,你在你的资源的方法设置:

@UnitOfWork(transactional = false) 

因此,在一个单一的交易,整个方法不包裹起来,但你仍然从UnitOfWork得到休眠Session。然后在您的DAO方法中,手动控制交易:

Transaction transaction = currentSession().beginTransaction(); 
    try { 
     // do some transactions 
     transaction.commit(); 
    } catch (Exception e) { 
     transaction.rollback(); 
     throw new RuntimeException(e); 
    }