私のサービスでは、@Transactional
注釈付きの方法があります。 内部では、2つのオブジェクトでさまざまなことをやっていますが、最後には.discard()
の変更が必要なので、このトランザクションには保存されません。 私が行うのは、object2に関する情報をActiveMQキューに送ります。そこでは、リスナーによってピックアップされます。そこではいくつかの作業が行われ、最後に別のトランザクションで保存されます。 Object1はいつものように保存されるはずです。Grailsの@TransactionalサービスでdomainObject.discard()が動作しないのはなぜですか?
ただし、これは機能しません。何が起こるかは、待ち行列のリスナーがオブジェクト.get()
にアクセスできるようになり、最初のトランザクションが終了する前にオブジェクトに変更が加えられ、.save()
になります。そのおかげで、私はorg.hibernate.StaleObjectStateException: Row was updated or deleted by another transaction (or unsaved-value mapping was incorrect)
を得る。
私はサービス内でオブジェクトの.get()
を実行します。サービスを終了してコントローラに戻ったときにトランザクションが保存されます。
Grailsがメイントランザクションでobject2を保存しないようにするには、どうすればよいですか?
サービス内の別のメソッドにobject2アクセスを設定し、その一部または外部トランザクションではないことはできますか? –
いいえ、それはキューイングのメカニズムを使用するポイントの1つです。別のトランザクションでそれを行うことです。[これは唯一のポイントではありません。] – Krystian
これは私の頭の中で解明されていませんが、代わりに保存したくないオブジェクトを.read()することができれば、明示的に保存しない限り永続化されませんそれ。 –