我对休眠有点陌生,正在尝试使用 ehCache 实现二级缓存。尝试使用 L2 缓存检索多对一关联时遇到问题。我的 foo.hbm.xml 文件中的关联映射如下所示:
<hibernate-mapping>
<class name="com.test.Foo" table="FOO" >
<id name="id" type="long">
<column name="FOO_ID" precision="11" scale="0" />
<generator class="assigned" />
</id>
<many-to-one name="bar" class="com.test.Bar" >
<cache usage="read-only" />
<column name="BAR_TY" not-null="true" />
<column name="BAR_VAL" length="4" not-null="true" />
</many-to-one>
</class>
</hibernate-mapping>
(这是我的实际 hbm.xml 文件的一个非常缩短/修改的版本,希望其中没有错误)
请注意,我只缓存“bar”,而不是“foo”。但是,当我使用此映射运行单元测试时,出现以下错误:
严重:解析 XML 时出错:XML InputStream(40) 元素类型“多对一”的内容必须匹配“(meta*,(column|formula)*)”。
当我取出它时,它工作正常,只是没有 L2 缓存。仅仅是多对一的关系不支持缓存吗?如果是这样,关于如何解决这个问题的任何建议?
仅供参考,我有另一个单元测试直接读取“bar”(即不通过关联)并且它工作正常 - 第二次我得到一个“bar”它从 L2 缓存中获取它,所以我相当有信心我有其余配置正确完成。很抱歉,仍然在石器时代工作,所以没有注释等。