天天看點

nhibernate實體類主鍵ID指派問題

有個同僚忽然來找我,說他遇到了一個問題,在調用nhibernate 進行update資料的時候報錯,說是有資料行鎖定。

看代碼,沒啥問題。

直接在PL/SQL developer裡對資料庫進行插入,也沒啥問題。應該不是有事務沒送出,表被鎖了的情況。但我們水準低,為防萬一,還是重新開機了資料庫。好不容易重新開機後再試,問題依舊在,幾度夕陽紅。

後來将update改為insert,發現還是錯。找到報錯的詳細資訊,提示用到了一個大約叫”seq_hibernate”(記得不是很清楚了)的序列。我們沒有定義過這個序列,難道這是一個nhibernate自帶的序列?

找來找去,發現實體類代碼這裡,主鍵id沒有定義如何指派。

一般地,nhibernate中,實體類映射,對id的指派有倆方式

Id(s => s.ID).GeneratedBy.Assigned(); //直接指派           
Id(s => s.ID).GeneratedBy.Sequence("SEQ_WebSite"); //用序列           
Id(s => s.ID);           
Id(s => s.ID).GeneratedBy.Sequence("SEQ_WebSite"); //用序列