Java EE、Netbeans、およびファサードセッションBeanを使用してJPAレイヤー(eclipselink)を実装しています。
たとえば、2つのテーブルがあります。Garden(1)---> Tree(n)。
(スクリプトA)ここで、このスニペットを実行します。
Garden mGarden = new Garden();
.....
gardenFacade.create(garden)
(スクリプトB)次に:
Tree oneTree = new Tree();
oneTree.setGarden(mGarden);
treeFacade.create(oneTree);
このようにして、エンティティツリーがデータベースに正しく追加され、外部キーが正しくなります。
(スクリプトC)呼び出すと:
Garden findGarden = gardenFacade.find(gardenId);
int count = findGarden.getTreeCollection().size();
私はカウント=0!!! Glassfishを再起動するか、アプリをリロードして、これらのスニペットを実行すると、カウント=1になります。
したがって、スクリプトBを次のように変更すると、これは永続コンテキスト同期の問題だと思います。
Tree oneTree = new Tree();
oneTree.setGarden(mGarden);
treeFacade.create(oneTree);
mGarden.getTreeCollection().add(oneTree);
gardenFacade.edit(mGarden);
すべて正しく動作します!この問題を解決するにはどうすればよいですか?
編集:
create --> getEntityManager().persist(entity);
edit ----> getEntityManager().merge(entity);
find ----> getEntityManager().find(entityClass, id);