Я новичок в спящем режиме и пытаюсь реализовать кэширование второго уровня с помощью 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) Содержимое типа элемента "многие к одному" должно соответствовать "(мета*,(столбец|формула)*)".
Когда я вынимаю, он работает нормально, просто нет кэширования L2. Просто отношения «многие к одному» не поддерживают кэширование? И если да, то какие предложения, как это обойти?
К вашему сведению, у меня есть еще один модульный тест, который считывает «полосу» напрямую (т. е. не через ассоциацию), и он работает правильно — во второй раз, когда я получаю «полосу», она берется из кеша L2, поэтому я вполне уверен, что у меня есть остальные настройки сделаны правильно. А так извините, все еще в каменном веке на работе, поэтому никаких аннотаций и т. Д.