Hibernate - Кэширование кэширования запроса/второй уровень не работает объектом значения, содержащим субтоки

StackOverflow https://stackoverflow.com/questions/2201457

Вопрос

Я боролся со следующей проблемой:
У меня есть объект значения, содержащий разные панели. Каждая панель имеет список полей.

Картирование:

<class name="com.aviseurope.core.application.RACountryPanels" table="CTRY" schema="DBDEV1A" where="PEARL_CTRY='Y'" lazy="join">
<cache usage="read-only"/>
<id name="ctryCode">
<column name="CTRY_CD_ID" sql-type="VARCHAR2(2)" not-null="true"/>
</id>
<bag name="panelPE" table="RA_COUNTRY_MAPPING" fetch="join" where="MANDATORY_FLAG!='N'">
<key column="COUNTRY_LOCATION_ID"/>
<many-to-many class="com.aviseurope.core.application.RAFieldVO" column="RA_FIELD_MID" where="PANEL_ID='PE'"/>
</bag>
</class>

Я использую следующие критерии, чтобы получить объект значения:

Session m_Session = HibernateUtil.currentSession();
            m_Criteria = m_Session.createCriteria(RACountryPanels.class);
            m_Criteria.add(Expression.eq("ctryCode", p_Country));
            m_Criteria.setCacheable(true);

Как я вижу, кэш запроса содержит только основной выбор

select * from CTRY where ctry_cd_id=?

Как RacountryPanels, так и Rafieldvo кэшированы на втором уровне. Если я проверю контент кэша 2 -го уровня, я увижу, что он также сочетает в себе RAFIELDS и RacountryPanels, и я смогу увидеть Select .. из Ctry, где Ctry_cd_id = ... в регионе кэша запросов.

Когда я называю сервлета, кажется, что он использует кэш, но во второй раз нет. Если я проверю содержание кэша с помощью JMX, все в порядке, но когда я измеряю время доступа объекта, кажется, что он не всегда использует кэш.

Ура Золтан

Это было полезно?

Решение

Я думаю, что вам нужно также кэшировать ассоциацию:

<bag name="panelPE" table="RA_COUNTRY_MAPPING" fetch="join" where="MANDATORY_FLAG!='N'">

  <cache usage="read-write"/>

  <key column="COUNTRY_LOCATION_ID"/>
  <many-to-many class="com.aviseurope.core.application.RAFieldVO" column="RA_FIELD_MID" where="PANEL_ID='PE'"/>
</bag>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top