2

私の "HelloJPA" コード (以下) は、従業員をデータストアに格納しようとします。ただし、(リソース ローカル) トランザクションをコミットした後に永続化されたオブジェクトを読み取ろうとすると、「IllegalStateException」が返されます。

Employee employee = ...
EntityManagerFactory factory =
    Persistence.createEntityManagerFactory( "HelloJPA", System.getProperties() );
EntityManager manager = factory.createEntityManager();
EntityTransaction transaction = manager.getTransaction();
try {
    transaction.begin();
    manager.persist( employee );
    transaction.commit();
} finally {
    if (transaction.isActive()) {
        transaction.rollback();
    }
    manager.close();
}
System.out.println("Employee id == " + employee.getId() ); //<< IllegalStateException

OK、私はマネージャーが新しく割り当てられた従業員オブジェクトを所有し、トランザクションをコミットすると使用できなくなったと思います。しかし、この単純な操作を実装するための一般的なイディオムは何ですか?つまり、オブジェクトへの読み取り専用アクセスを維持しながら、データストアまでずっとオブジェクトを書き込みますか? ドキュメント (チュートリアルまたは API リファレンス) はこれに具体的に対処しておらず、リソース ローカル トランザクションを使用することがわかったコード サンプルは、コミット後にオブジェクトを読み取ろうとしないようです ... しかし、確かに簡単な方法が必要です。それをするために??

これに関するヘルプ/ポインタを事前にありがとう!

4

1 に答える 1

0

エンティティマネージャーを閉じた後、あなたは切り離されますが、切り離されたエンティティの注釈付きプロパティemployeeへのアクセスを禁止するものは何もありません。IdIOW、あなたのコードは正しく、Hibernate と EclipseLink で動作します。たぶん、OpenJPA の Jira で既存の問題を検索するか、新しい問題を開きます。

于 2010-08-10T13:13:44.313 に答える