我有以下用例:
我的应用程序中有许多标准实体。当我的应用程序执行这些实体之一的实例的 JPA 保存/合并时,我希望对特殊Event
实体的实例进行另一次保存。因此,对于标准实体上的每个操作,都会将一个事件插入到数据库中。
我正在考虑使用 AOP 来实现这个横切关注点。但是,我们要不惜一切代价避免创建标准实体而没有创建事件,反之亦然:在插入标准实体和正在创建的事件时发生回滚。
那么如何使用 Spring AOP 确保操作的原子性呢?
欢迎任何线索或提示。
我有以下用例:
我的应用程序中有许多标准实体。当我的应用程序执行这些实体之一的实例的 JPA 保存/合并时,我希望对特殊Event
实体的实例进行另一次保存。因此,对于标准实体上的每个操作,都会将一个事件插入到数据库中。
我正在考虑使用 AOP 来实现这个横切关注点。但是,我们要不惜一切代价避免创建标准实体而没有创建事件,反之亦然:在插入标准实体和正在创建的事件时发生回滚。
那么如何使用 Spring AOP 确保操作的原子性呢?
欢迎任何线索或提示。
只需确保创建事件的方面与创建标准实体的事务在同一事务中运行。一种方法是确保事务方面的顺序将其置于事件保存方面之外。
编辑:根据http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/transaction.html#transaction-declarative-annotations确保应用事务方面非常简单在任何其他方面之前。
在您的 tx 定义中包含一个 order 属性...
<tx:annotation-driven order="-1"/>
因此,只要您的其他方面的顺序大于 -1,事务方面就会首先运行。有关方面排序的更多信息,请参阅http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/aop.html#aop-ataspectj-advice-ordering。