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