我的模型:更新父親攔截
public class Father {
Set<Son> sons = new HashSet<Son>();
String name = null;
Date lastSonModifyDate = null;
// ... other fields and setters/getters
}
public class Son {
Father father = null;
String name = null;
Date lastModifyDate = null;
// ... other fields and setters/getters
}
使用案例:
- 有在DB一個
Father
對象有關聯的對象Son
(雙向)。 - 從DB父加載。
- 更新父親的姓名字段。
- 更新兒子的名稱字段。
- 堅持父親。
我的攔截器首先檢測到父更新(onFlushDirty)。然後爲兒子執行onFlushDirty。在這種情況下,我更新了son.lastModifyDate 以及father.lastSonModifyDate。
執行結束時,除father.lastSonModifyDate之外的所有更新都會持續。我認爲這是因爲父親在會話中並且已經在兒子之前更新過,所以這個實體覆蓋了在子實體的onFlushDirty方法中所做的更改。
我怎麼能達到我的標記(從兒子攔截器設置父親的lastSonModifyDate)?
謝謝。
我不能這樣做,DAO中,因爲兒子的對象,通常被保存/從父對象通過級聯更新中...所以我無法控制它。 也許數據庫級別是一個不錯的解決方案。但是,「生成」意味着數據庫引擎會創建時間戳?真的,我需要以具體的格式設置日期屬性,不受任何數據庫引擎支持... – Alberthoven 2009-10-16 18:15:51
不確定您的意思是「通過級聯更新...所以我無法控制它」。如果你在DAO中有一個'updateFather()'方法,那麼如何防止你在調用session.update()之前打上任何你想要的實體?就數據庫而言,「具體格式」是什麼意思?日期是一個日期(時間/時間戳,無論),它保存爲這樣。如何在應用中對其進行格式化是一個完全不同的故事。 – ChssPly76 2009-10-16 18:21:12
Ok,fisrt,我幾乎從來沒有爲Son對象調用過DAO.saveOrUpdate,但只能爲父對象調用...所以與父對象關聯的Son元素會在級聯中持久化(使用org.hibernate.annotations.Cascade)。其次,恐怕我對日期字段並沒有完全的真誠:實際上,Father.lastSonModifyDate和Son.lastModifyDate表示日期,但它們的類型是String,因爲使用String DateFormatter讀取和寫入它們的值。 .. 這是因爲格式是我的「不支持」的原因。 – Alberthoven 2009-10-16 18:30:25