다음 문제로 어려움을 겪고 있습니다.
다른 패널을 포함하는 값 객체가 있습니다. 각 패널에는 필드 목록이 있습니다.Hibernate - 하위 항목을 포함하는 값 객체에 의해 쿼리 캐싱/2 차 수준 캐시가 작동하지 않음
매핑 :
<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를 cointains한다는 것을 알 수 있습니다. 또한 CTRY에서 ctry_cd_id = ... 쿼리 캐시 영역에서도 select ...를 볼 수 있습니다.
서블릿을 호출 할 때 캐시를 사용하고 있지만 두 번째로 보이지는 않습니다. JMX를 사용하여 캐시의 내용을 확인하면 모든 것이 정상인 것처럼 보이지만 객체 액세스 시간을 측정 할 때 항상 캐시를 사용하는 것은 아닙니다.
건배 졸탄
,하지만 당신이 할 수있는 경우 자세한 내용을 제공하기 위해 시도 @hamoriz :-( – HamoriZ
도움이되지 않았다 (예 : 요청 전후의 JMX와 같이) –
RA_FIELD 매핑을 수정 한 후에 다른 문제가 발생했습니다. 귀하의 권장 사항에 따라 – HamoriZ