したがって、アノテーションを使用して、クラスが次のようなトランザクションを必要とすることを指定しています。
@TransactionAttribute (TransactionAttributeType.REQUIRED)
public class Foo() {
...
}
データベースに実際に変更を加えるそのクラスのコードの一部では、それらの変更がそのクラスのコードの他の部分 (場合によっては次の行) には表示されないことがわかりました。そのため、クエリをフラッシュすることで何とか機能させることができましたが、それは本当に奇妙に感じます。アノテーションによってトランザクションが正しく動作することを期待していましたが、機能させるには多くの操作を行う必要があるようです。
私はGoogleで検索するのに多くの時間を費やしましたが、私が見つけたのは、この注釈をコードではなくxmlファイルで使用することです。誰かがコードの動作を説明してくれるか、少なくとも @ アノテーションを具体的に扱っている Web サイトを教えてくれることを願っています。
編集: JBoss と hibernate を使用しています。動作しないコードの簡単なサンプルを次に示します。
System.out.println("before:" + some_obj.getName());
util = (UtilFacade) EJBFactory.lookup(UtilFacadeBean.class);
some_object.setName("changed");
util.persistEntity(some_obj);
util.refreshEntity(some_obj); // reloads the object to get fresh data
System.out.println("after:" + some_obj.getName());
このコードからの出力は次のようになります。
>>before:start name
>>after:start name
しかし、2 つ目は >>after:changed と表示されることを期待していました
util.flush(); を追加することで、これを回避することができました。util.persistEntity() の呼び出し後。
util の呼び出しは、hibernate API を利用する EntityManager に依存しています。
私の質問が明確でない場合は、さらに知りたいことをお知らせください。編集に取り組みます。
前もって感謝します!