デタッチされた状態で永続オブジェクトを変更することに関連する問題に直面しました。このような変更はサーバー内の一部のオブジェクトに影響しますが、何らかの理由で DB 内のオブジェクトのマッピングには影響しません。
私が持っているもの:
1 対多の関連付けでリンクされている 2 つのエンティティ: プロファイル -> ファイル。新しいファイルを追加しようとするファイルリストでプロファイルしました。
何の問題:
最初にプロファイルのファイル リストを消去し (II セクション)、次に新しいファイルをプロファイルに追加します (III セクション)。結局のところ、DB には、 profile.getFileList().clear() によって削除されたファイルを含むすべてのファイルがあります。
質問:
profile.getFileList().clear() を続行すると、DB に古いファイルがあるのはなぜですか?
私のコード:
//I. pull the profile from BD
Session session = sessionFactory.openSession();
Profile existingProfile = (Profile) session.get(Profile.class, profileId);
session.close();
//II. make the copy of profile, out of the session scope, and clear file list of it
String serializedProfile = convertToJson(profile);
profile = Utils.jsonToObject(serializedProfile , Profile.class);
profile.getFileList(); // not empty!
profile.getFileList().clear();
//III. add new files to profile's file list
Session session1 = sessionFactory.openSession();
session1.beginTransaction();
profiles.getFileList().addAll(additionalFileList);
session1.saveOrUpdate(profile);
session1.getTransaction().commit();
session1.close();