gpt4 book ai didi

java - Dropwizard 嵌套事务

转载 作者:行者123 更新时间:2023-11-30 09:01:27 24 4
gpt4 key购买 nike

我的资源中有批量创建用户的方法。我用@UnitOfWork 注释了我的资源方法,但是我也注释了这个操作的具体服务方法,因为只保存部分用户的情况对我来说没问题。

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

我注意到,当我的资源方法未使用 @UnitOfWork 注释而我的服务 BulkSave 方法使用注释时,dropwizard 无法开始事务。从逻辑的角度来看,这应该有效但不起作用。

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

最后我有相关的实体没有保存,或者在回滚嵌套事务时主事务出错(发生异常后不要刷新Session)

有没有人遇到过类似情况或者对Dropwizard中的Session管理了解更多?

最佳答案

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

取而代之的是你在你的 Resource 方法集中:

@UnitOfWork(transactional = false)

这样整个方法就不会包含在单个事务中,但您仍然可以从 UnitOfWork 获取 hibernate Session。然后在您的 DAO 方法中,通过以下方式手动控制事务:

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

关于java - Dropwizard 嵌套事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26411823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com