我试图让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>