0

私たちが開発するアプリケーションには、オブジェクトの階層があります。

CampaignStatus <- Campaign -> CampaignItem*

簡単に言えば、Campaign複数CampaignItemの を含む があり、それぞれCampaignCampaignStatus、特定のキャンペーンが持つアイテムの数、またはさまざまなパラメーターに基づいて計算される があります。簡単に言うと、アイテム関連の変更が DB に保存された後、特定のキャンペーンのキャンペーン ステータスを更新する必要があります。

私の意見では、これはアスペクト/インターセプターを使用するための適切な基盤のように思えますが、これが良い習慣であるかどうかはわかりません.

問:そうですか。

Q:トランザクションがコミットされた後にインターセプターをトリガーできますか?

4

2 に答える 2

0
  1. いいえ。これは、ビジネス層に実装する必要があるビジネス要件です。キャンペーンのすべての更新が特定のサービスによって行われることを確認し、このサービスもそれに応じてステータスを更新するようにしてください。

  2. データベースが一貫した状態であることを本当に望んでいます。そのため、キャンペーンとそのステータスを同じトランザクションで更新する必要があります。そうしないと、キャンペーンの更新に成功してもステータスの更新に失敗し、データベースが一貫性のない状態のままになる可能性があります。それがトランザクションのすべてです。

于 2013-08-10T10:31:09.917 に答える
0

EntityListener コールバック @PostPersist および @PostUpdate を試すことができます (このリンクを確認してください)。もう 1 つの解決策は、トリガーを使用して DB にビジネス ロジックを配置することです (デッドロックの問題が発生する可能性があるため、これはお勧めしません)。

于 2015-07-02T13:39:50.797 に答える