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"