2010-02-04 2 views
2

다음 문제로 어려움을 겪고 있습니다.
다른 패널을 포함하는 값 객체가 있습니다. 각 패널에는 필드 목록이 있습니다.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를 사용하여 캐시의 내용을 확인하면 모든 것이 정상인 것처럼 보이지만 객체 액세스 시간을 측정 할 때 항상 캐시를 사용하는 것은 아닙니다.

건배 졸탄

답변

4

난 당신이 또한 협회 캐시 할 필요가 있다고 생각 : 나는 밖으로 시도

<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> 
+0

,하지만 당신이 할 수있는 경우 자세한 내용을 제공하기 위해 시도 @hamoriz :-( – HamoriZ

+0

도움이되지 않았다 (예 : 요청 전후의 JMX와 같이) –

+0

RA_FIELD 매핑을 수정 한 후에 다른 문제가 발생했습니다. 귀하의 권장 사항에 따라 – HamoriZ