최대 절전 모드 - 쿼리 캐싱/두 번째 레벨 캐시는 값 객체를 포함하는 값으로 작동하지 않습니다.

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=?

경마장과 Rafieldvo는 모두 2 단계 캐시입니다. 두 번째 레벨 캐시 컨텐츠를 확인하면 Rafields와 RacountryPanel도 공동으로 표시되는 것을 볼 수 있으며 CTRY_CD_ID = ... 쿼리 캐시 영역에서도 SELECT를 볼 수 있습니다.

서블릿을 호출 할 때 캐시를 사용하는 것처럼 보이지만 두 번째는 그렇지 않습니다. 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