特別在更新表單對象的時候。
例子:
如: Department部門類
該部門類有以下屬性:
id : Long
name : String (注:部門名稱)
description : String (注:部門說明)
parent : Department (注:上級部門)
children : Set<Department> (注:下級部門)
修改頁面表單: 除了children屬性沒有提供設置外,其他屬性都有相應的輸入框等進行設置(其中id是隱藏字段)。
那麼該頁面提交到的頁面表單對象是隻包含了id, name , description , parent 的實體,如果直接使用該對象進行更新的話,那麼就會使得該對象修改之前的children屬性爲空。
也就是說,如果該“開發部門”對象,通過session.update(department)後,“開發部門”對象下的“研發組”,“編程組”等下級部門就變成了沒有上級部門的部門。
如果需要只改變“開發部門”部門對象的name屬性和description、parent屬性,而不改變原有的“children”屬性,那麼,我們就要使用以下的方法來進行更新,而不是直接更新。
首先,通過頁面表單傳遞過來的“開發部門”部門的id進行查找在數據庫中的該持久化對象;
然後,通過給該持久化對象的name,description,parent 屬性進行set()方法賦值;
最後,使用session.update()方法,更新該持久化對象,那麼就會只更新了該持久化對象的name,description,parent屬性。而不改變原有的children屬性。
session更新對象的參考代碼:
SessionFactory sessionFactory = new SessionFactory();
Session session = null;
try{
session = sessionFactory.openSession();
session.beginTranscation();
session.update(entity);
session.getTransaction().commit();
}catch(Exception e){
session.getTransaction().rollback();
}finally{
session.flush();
session.close();
}