有個同僚忽然來找我,說他遇到了一個問題,在調用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"); //用序列