0

在我们开发的应用程序中,我们有一个对象层次结构:

CampaignStatus <- Campaign -> CampaignItem*

用简单的话来说,我有一个Campaign有多个CampaignItem的,每个Campaign都有一个CampaignStatus根据给定活动的项目数或不同参数计算的。长话短说,在项目相关更改保存在数据库中之后,我需要更新给定活动的活动状态。

在我看来,这听起来像是使用方面/拦截器的适当基础,但我不知道这是否是一个好习惯。

问:是这样吗?

Q:事务提交后可以触发拦截器吗?

4

2 回答 2

0
  1. 不,这是一个业务需求,应该在您的业务层中实现。只需确保活动的所有更新均由给定服务进行,并使该服务也相应地更新状态。

  2. 您真的希望您的数据库处于连贯状态。因此活动及其状态必须在同一事务中更新。否则,您可能会成功更新活动,然后无法更新状态,这会使数据库处于不连贯的状态。这就是交易的全部内容。

于 2013-08-10T10:31:09.917 回答
0

您可以尝试 EntityListener 回调 @PostPersist 和 @PostUpdate(检查此链接)。另一种解决方案是通过使用触发器在 DB 上拥有业务逻辑(我不建议这样做,因为您可能会遇到死锁问题)。

于 2015-07-02T13:39:50.797 回答