Я немного новичок в спящем режиме и пытаюсь реализовать кэширование второго уровня с помощью 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". Однако, когда я запускаю модульный тест с этим отображением, я получаю следующую ошибку:
SEVERE: Ошибка синтаксического анализа XML: XML InputStream (40) Содержимое типа элемента "много-к-одному" должно совпадать "(meta *, (column | формула) *)".
Когда я вынимаю, все работает нормально, просто нет кэширования L2.
Это просто, что отношения многие-к-одному не поддерживают кеширование? И если да, какие-либо предложения о том, как обойти это?
К вашему сведению, у меня есть другой модульный тест, который читает «bar» напрямую (т.е. не через ассоциацию) и работает правильно - во 2-й раз, когда я получаю «bar», он получает его из кэша L2, так что я довольно уверен У меня остальная часть конфигурации выполнена правильно. И очень жаль, все еще в каменном веке на работе, поэтому никаких аннотаций и т. Д.