我遇到了与在分离状态下更改持久对象相关的问题。此类更改确实会影响服务器中的某些对象,但由于某种原因不会影响对象在数据库中的映射。
我有的:
与一对二多关联链接的两个实体:配置文件->文件。我有文件列表的配置文件,我尝试向其中添加新文件。
什么问题:
我首先清理配置文件的文件列表(在 II 部分),然后将新文件添加到配置文件(在 III 部分)。毕竟,在数据库中,我拥有所有文件,包括被 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();