Hbernate二級キャッシュehcache
プロジェクトではHibernateを使用していますが、テスト前にアプリケーションを顧客試験環境に配置した時、プログラムの応答が著しく遅くなりました.調べたところ、Hbernateのカスケードロードが応答時間を大きくしました.二級キャッシュ(私が使っているのはehcacheです.)に加入した後、一連の問題が発生しました.ここに記載します.
参照:
Spring Hbernate Session Factory関連配置:
<property name=「cacheQueries」>
<value>true
以上はクエリーキャッシュを開いています.
どうやって実体キャッシュを配置しますか?google.
Ehcacheの設定:
なぜかというと、私は新規作成時に関連する画像のセットに新しい画像を入れていないので、セット内とデータベースは同期していません.
解決:新規に関連エンティティの参照関係を設定します.
問題2:関連を修正する時、元の関係者はやはり修正対象を保有しています.
解決:修正する時、先に関連先を引用して解除して、新しい関係を設定します.
参照:
Spring Hbernate Session Factory関連配置:
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource">
<ref bean="dataSource" />
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.Oracle9Dialect
</prop>
<prop key="hibernate.show_sql">true</prop>
<prop key="hibernate.cache.use_query_cache">true</prop>
<prop key="hibernate.cache.provider_class">
org.hibernate.cache.EhCacheProvider
</prop>
<prop key="hibernate.jdbc.batch_size">20</prop>
<prop key="hibernate.cache.use_second_level_cache">
true
</prop>
<prop key="hibernate.connection.provider_class">
org.hibernate.connection.C3P0ConnectionProvider
</prop>
</props>
</property>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
<property name="cacheQueries">
<value>true</value>
</property>
</bean>
<property name=「cacheQueries」>
<value>true
以上はクエリーキャッシュを開いています.
どうやって実体キャッシュを配置しますか?google.
Ehcacheの設定:
<?xml version="1.0" encoding="UTF-8"?>
<ehcache>
<diskStore path="java.io.tmpdir" />
<!-- -->
<defaultCache
maxElementsInMemory="1000"
eternal="false"
overflowToDisk="true"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="org.hibernate.cache.UpdateTimestampsCache"
maxElementsInMemory="5000"
eternal="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
overflowToDisk="false"/>
<cache name="org.hibernate.cache.StandardQueryCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
overflowToDisk="false"/>
<cache name="com.sinotrust.entity.data.DataDir"
maxElementsInMemory="500"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="com.sinotrust.entity.ras.RasDicCodemanager"
maxElementsInMemory="700"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="com.sinotrust.entity.ras.RasDicCatalog"
maxElementsInMemory="100"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
<cache name="com.sinotrust.entity.ras.RasSysMenuconf"
maxElementsInMemory="50"
eternal="true"
overflowToDisk="false"
timeToIdleSeconds="180"
timeToLiveSeconds="360"
/>
</ehcache>
問題1:エンティティが追加された後、カスケード方式で新規コンテンツを取得できませんでした.なぜかというと、私は新規作成時に関連する画像のセットに新しい画像を入れていないので、セット内とデータベースは同期していません.
解決:新規に関連エンティティの参照関係を設定します.
問題2:関連を修正する時、元の関係者はやはり修正対象を保有しています.
解決:修正する時、先に関連先を引用して解除して、新しい関係を設定します.