0

私の目標は、レコードをデータベースに挿入してから、新しいトランザクションで更新することです。

私はこのように試します:

@PersistenceContext(unitName="Table")
private EntityManager manager;

@EJB
private ITransactionTest itt;

public void insertRecord(int i) throws RuntimeException{
      Record record = new Record();
      record.setId(i+"");
      record.status(1);
      manager.persist(record);
      manager.flush();
      itt.updateRecord(i);
}

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void updateRecord(int i) throws RuntimeException{
      Record record = manager.find(Record.class, i+"");
      record.setStatus(2);
      manager.flush();
}

しかし、うまくいきません。getReference()また、レコードを取得するために使用しようとすると、エンティティが見つからないという例外がスローされます。エンティティが永続コンテキストに存在しなくなったようです。

の注釈を削除するREQUIRES_NEWと機能し、レコードを正常に更新できます。

では、新しいトランザクションでレコードを更新するにはどうすればよいでしょうか? トランザクションをまたぐ永続コンテキストでエンティティを管理状態に保つにはどうすればよいですか?

JPAを使用して更新SQLクエリを実行すると、私の目標を達成できるようです。しかし、他の方法はありますか?

よろしくお願いします、

カジェラス

4

2 に答える 2

0

「持続性コンテキストは通常​​、Java EEのJTAトランザクションに結合され、拡張エンティティマネージャーを使用しない限り、永続性コンテキストはトランザクション境界(トランザクションスコープ)で始まります(トランザクションスコープ)。」

出典:http : //docs.jboss.org/hibernate/orm/4.0/hem/en-us/html/transactions.html

JPAサポートのみ(理論的に)read_committed隔離(hibernate 、spring、jps&隔離 - カスタム分離を参照 - サポートされていない)最終的な回避策

于 2013-04-04T15:05:25.897 に答える
0

http://www.adam-bien.com/roller/abien/entry/how_to_self_invoke_ejb を見てください。
問題はそのエントリで解決されていると思います。

于 2013-04-04T15:24:58.160 に答える