用 Hibernate 碰到一個很傻的問題,在 iCustomer 中有這樣的關聯,有服務記錄,該記錄會與 Customer 關聯,當時為了在不需要的時候不在 VO 里 new 出 Customer,用了這樣的寫法。
public Customer getCustomer() {
?if (null == customer) {
??customer = new Customer();
?}
?return customer;
}
這樣看似沒有問題,當使用到 Customer 的時候才會創建該對象。但是每次卻會報告臟數據錯誤,其實最重要的是我忽略了一個問題,這個方法同樣會被 Hibernate 調用,在 null 的時候給 new 出一個相應的 Customer,這樣就會出現問題了,如果你把 Customer 設成 null,Hibernate 調用該方法時就會自動給你 new 一個 Customer,并沒有任何 id,這樣在保存的時候會引發臟數據錯誤。所以一定要避免這樣的寫法。
別人給出的建議是把這樣的 new Customer 的邏輯放在外面寫,手動處理 Customer 的創建。頁面上傳遞的是 Customer 的 id,后臺手動加載 Customer 的 PO,然后 set 給 Support。
posted on 2006-07-04 18:30
steady 閱讀(803)
評論(0) 編輯 收藏