我想知道在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我可以更新任何父字段而不用擔心丟失孩子。無論如何,這是相當嚴格的,並且這種關係永遠不會被更新。
那麼,您認爲解決這種情況的最佳方法是什麼?
預先感謝您!