1、Could not initialize proxy - no Session.
原因:hibernate3 many-to-one的默認選項是 lazy = "proxy"
>解決方法:<many-to-one> & <set> 中設置 lazy="false"
其實只在<many-to-one>中設置lazy="false"就可以了,在set也設置的話會多一次查詢。
>2、沒有主鍵的表如何編寫.hbm.xml配置文件
>有.hbm.xml配置中都需要一個
<id name="ID"> <generator class="guid"></generator> </id>
沒有<id>配置節的話會報錯,但是有的表就是沒有主鍵的。
比如說有的從表,例如訂單明細表,在大部分情況下是不需要主鍵的。
其實沒有<id>也可以,但是需要有<composite-id>,也就是聯合主鍵。聯合主鍵就是幾個屬性唯一標識當前記錄。
換個思路了,把所有的屬性加在一起作為聯合主鍵。
<composite-id> <key-property name="Amount"></key-property> <key-property name="CreateTime"></key-property> <key-property name="ModifyTime"/> </composite-id>
3、聯合主鍵之後需要注意的地方
使用聯合主鍵之後對應的Model需要實現Equals和GetHashCode方法,否則會報錯。
public override bool Equals(object obj) { var item = obj as CRMTypeCustomer; return this.CRMTypeID == item.CRMTypeID && this.CustomerID == item.CustomerID; } public override int GetHashCode() { return base.GetHashCode(); }
4、此SqlServerParameterCollection 的 Count=4 的索引 4 無效
原因是:
從表關聯主表時的問題.
<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model"/>
修改為:
<many-to-one name="dictate" column="DICTATEID" class="Model.JkptOaxtDictate,Model" insert="false" update="false"/>
即添加屬性
insert="false" update="false"