我想知道在Java上使用HB来更新某个独立对象的某些字段的最佳方法是什么。特别是当对象具有子对象属性时。对于实施例(注释除去和字段数目减少,以降低噪声):在Hibernate上更新分离对象的某些字段的最佳方法?
public class Parent {
int id;
String field2;
...
Child child;
}
public class Child {
int id;
String field3;
}
当在MVC web应用我可以调用用于使用Session.get(Parent.class,123)父实例更新父,用它来填充表单并显示它。没有DTO,只是将分离的父级传递给视图并绑定到表单。现在,我只想允许用户更新父级的属性field2。所以当用户发布表单时,我得到了一个id为id和field2的Parent实例(我认为mvc框架在这里不重要,所有的行为在绑定时都大致相同)。
现在,哪种策略最适合执行实体更新?我能想到的几个选择,但我想听听专家:)(记住,我不想失去父母和孩子实例之间的关系)
A)再次Retrive从会议父实例和用手取代更新的字段
Parent pojoParent; //binded with the data of the Form.
Parent entity = Session.get(Parent.class,pojoParent.getId());
entity.setField2(pojoParent.getField2()).
我用这个很多。但pojoParent似乎被用作卧底DTO。如果要更新的字段数量变大,它也会变得很糟糕。
B)将孩子存储在某个地方(httpSession?)并将其关联到后者。
Parent parent = Session.get(Parent.class,123);
//bind the retrieved parent to the form
// store the Child from parent.getChild() on the httpSession
...
//when the users submits the form...
pojoParent.setChild(someHttpSessionContext.getAttribute('Child'))
Session.save(pojoParent);
我觉得这是废话,但我看到了它在某些项目...
C)设置父母与子女作为inmutable之间的关系。在关系上使用updatable = false我可以更新任何父字段而不用担心丢失孩子。无论如何,这是相当严格的,并且这种关系永远不会被更新。
那么,您认为解决这种情况的最佳方法是什么?
预先感谢您!