Dropwizard嵌套事务
问题描述:
我在我的资源中有批量创建用户的方法。 我使用@UnitOfWork注释了我的资源方法,但是我对此操作的具体服务方法也进行了注释,因为只有部分用户保存时的情况对我来说是okey。Dropwizard嵌套事务
总结我有主事务,并且许多嵌套事务需要单独保存用户。
我注意到当我的资源方法没有用@UnitOfWork和我的服务BulkSave方法进行注释时,dropwizard无法开始事务。从逻辑的角度来看,这应该工作,但不工作。
我尝试使用@UnitOfWork设置刷新模式,首先将FlushMode设置为手动,这几乎是完美的。当嵌套事务回滚时,主事务可以被提交,这是很好的解决方案。 但是这个解决方案并没有我想象的那么好。使用级联保存相关实体不起作用!
最后,我有相关的实体,其不保存,或在主交易错误时,嵌套事务回滚是(发生异常后不要冲洗会议)
人有类似的情况或了解更多关于会议Dropwizard中的管理?
答
@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);
}