【发布时间】:2016-09-09 11:06:45
【问题描述】:
我有尝试更改某些实体的方法,在此方法中我也想保存交易信息。 当发生任何异常时,我想回滚保存实体但仍想保存事务。 那么如何让一个实体存储库为事务存储库而不为事务存储库呢?
有来自仓库的代码
@Override
@Transactional(noRollbackFor=NotEnoughAmountInAccountException.class)
<T extends Transaction> T save(T transaction);
但这无济于事。 保存放置在最终块中的交易。
更新
我通过使用 AOP 解决了它。我在方面建议中创建事务对象并将其保存在 JPA 事务之外。
【问题讨论】:
-
请提问,向我们展示异常跟踪...
-
我添加了问题。没有堆栈跟踪,只是事务也因为回滚而没有保存。
-
您可能想要做的是将存储库类保持原样,并拥有具有不同事务行为的服务方法,这样当您调用您的方法时,它会调用具有不同事务行为的其他服务方法(例如例如传播.REQUIRES_NEW)。这样您就可以保存“事务”,并且在任何未经检查的异常或
NotEnoughAmountInAccountException的情况下,外部事务可能会被回滚,但具有新行为的内部事务仍将被提交。 -
它不起作用。据我了解,Spring 仅为公共方法创建代理方法,因此私有方法上的 @Transactional 不起作用。我不想公开它,因为有人可以在不保存交易的情况下调用它。
-
能否请您发布您为解决问题所做的工作,并使用一些代码作为答案?并自己接受你的答案......它可能会帮助别人
标签: java spring hibernate transactions spring-data-jpa