考虑以下情况:
我有一个Person实体,它与Group实体有多对多关系,与Role实体有多对多的关系。两个实体都与Person设置CascadeType到SAVE_UPDATE具有双向关系。 FetchType设置为LAZY。
人还有姓名,生日,身份等属性。
由于我在繁重的事务多线程环境中工作,作为设计考虑因素,当要修改某个Person属性时,通过hibernate会话的get方法检索的Person对象正在使用以下方法复制:
public Person personCopyWithoutDependencies(Person entity){
Person person = new Person();
person.setId(entity.getId());
person.setName(entity.getName());
person.setBirthdate(entity.getBirthdate());
person.setGroups(null);
person.setRoles(null);
return copy;
}
然后,我在复制对象中进行Person的特定属性修改,然后调用Hibernate会话的Update方法。完成复制是为了防止多个线程中的多个会话出现问题(在执行修改时调用sessionFactory.openSession()并在提交时关闭,而在调用objtect sessionFactory.getCurrentSession()时)。
如果我修改的person对象之前已关联Group和Role实体,则会删除数据库中的关系。
我想知道是否有可能在不失去关系的情况下进行我想要的修改。
非常感谢您提前。欢迎任何建议。
答案 0 :(得分:0)
执行此操作的唯一方法是验证,更改了什么,然后检索REal Hibernate对象。
步骤:
这是实现此目的的唯一方法。正如@Gimbly所提到的,你正试图处理,Hibernate认为这样做。