GlassFish 2.1.1(JavaEE 5、JPA 1.0、私の知る限り)のアプリケーションを書いています。他のトランザクションで行われた変更がEntityManagerに表示されない
@PersistenceContext(name = "persistence/em", unitName = "pu")
private EntityManager em;
@Resource
private UserTransaction utx;
@Override
protected void doPost(...) {
utx.begin();
. . . perform retrieving operations on em . . .
utx.rollback();
}
web.xml
それには次の通りです:
<persistence-context-ref>
<persistence-context-ref-name>persistence/em</persistence-context-ref-name>
<persistence-unit-name>pu</persistence-unit-name>
</persistence-context-ref>
、EM」はdoesnの私は(私は主にインターネット上でいくつかのサンプルから借りた)私のサーブレットに次のコードを持っています他のトランザクションで行われた変更を参照してください。概略的には、Webブラウザからサーブレットにリクエストを行い、データを参照し、SQLコンソールでDMLを実行し、サーブレット・ページをリロードします。変更は表示されません。私はem.flush
とutx.rollback
とem.joinTransaction
の多くの組み合わせを使用しようとしましたが、それはうまくいっていないようです。
私はJPAの初心者であるために状況が複雑になるため、基本的な機械の仕組みがはっきり理解できません。だから、どんな助けと何が起こっているのか、もっと重要なのは、説明/リンクは非常に高く評価されます。ありがとう!
「あなたはJPAを使用せずに、別のトランザクションでの操作を実行すると、キャッシュが最新ではなくなりました」 - それがあることを意味しています私はJPAを使用して前述のケースでデータを修正しましたが(一部の外部ツールではありません)、サーブレットページをリロードした後に変更が表示されますか? –
@Andy、そうです。実際、EntityManagerはキャッシュを維持する責任があります。 JPA概念ガイドは、OpenEJB - http://openejb.apache.org/3.0/jpa-concepts.htmlに掲載されています。 –