我試圖讓nHibernate使用二級緩存與多對一的關係,但是我找不到任何關於如何設置的明確解釋它正確。我發現這How to get nhibernate to cache tables referenced via many-to-one - is my config correct?,但sJHonny提供的示例是一對多的,當我採用它時,它不適用於我。還有其他文章討論這個問題,但沒有一個足夠具體。我提供的XML配置工作(我不得不大幅編輯,所以「希望」才起作用),但查找對象只有在查詢DataObject時纔會被緩存。我想知道1)在哪裏/如何預加載LookupObject集合? 2)如果我將這個集合分配給一個區域並設置過期,那麼我該如何重新加載緩存? 3)如何更改DataObject的hbm.xml,使nHibernate不會與LOOKUP表生成連接,即查找對象始終來自二級緩存,只從數據庫獲取DATA.LOOKUP_ID,而不是LOOKUP。名稱?使用nHibernate二級緩存進行多對一參考
LookupObject.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="BusinessObjects" assembly="BusinessObjects">
<class name="LookupObject" table="LOOKUP" mutable="false" batch-size="20">
<cache usage="read-only" />
<id name="Id" column="ID" />
<property name="Name" column="NAME" />
</class>
</hibernate-mapping>
DataObject.hbm.xml
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="BusinessObjects" assembly="BusinessObjects">
<class name="DataObject"
table="DATA" mutable="false">
<composite-id>
<key-property name="Id" column="ID"/>
<key-property name="Date" column="DATE" type="Date"/>
</composite-id>
<many-to-one name="LookupObject" not-null="true" column="LOOKUP_ID" fetch="join">
</class>
</hibernate-mapping>