entity
Aがあり、@Cacheable
と定義されています。そして、クエリキャッシュには、entity
Aが指定されたキャッシュ領域の下に「regionA」とロードされています。これはsetHint
と有効なキャッシュによって実行されます。 wildfly
の設定についてはInfinispan 2LC:クエリーキャッシュに指定された領域を持つエンティティキャッシュ
entity
キャッシュはデフォルトeviction
とexpiration
レットは以下のように言ったように、regionA
はありませんeviction
とexpiration
1として日どこで構成されています。
<local-cache name="entity">
<transaction mode="NON_XA"/>
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="1000000"/>
</local-cache>
<local-cache name="local-query">
<eviction strategy="LRU" max-entries="10000"/>
<expiration max-idle="100000"/>
</local-cache>
<local-cache name="regionA" statistics-enabled="true">
<eviction strategy="NONE" max-entries="-1"/>
<expiration lifespan="86400000" max-idle="14400000"/>
</local-cache>
ここで最初に実行すると、クエリキャッシュの結果がないため、SQLが実行されてエンティティをフェッチします。後で2回目の実行は、キャッシュregionA
から取られているようだ。しかし、18時間後、同じクエリを実行しようとしたが、クエリが再度実行されたように見える。
クエリキャッシュが「1日」の有効期限に設定されているとしたら、なぜそれがSQL
を再度実行するのでしょうか?その時間までにentity
キャッシュが期限切れになったのでしょうか?したがって、entity
キャッシュにはキャッシュ領域固有の設定が適用されません。 特定のキャッシュ領域に格納されたこれらのエンティティを区別する方法は、領域固有の設定に従います。
ありがとうございました。
ありがとうございます。したがって、エンティティを指定してregionAキャッシュ構成を使用し、指定されたキャッシュ領域に格納する方法はありますか?デフォルトでは、各エンティティは独自の領域の下に作成するためです。 – ulab
リージョンを定義できるHibernateの 'org.hibernate.annotation.Cache'を使う必要があります。あるいは、これを外部的に 'orm.xml'で設定します。 –
ありがとう、私はそれを得た。したがって、hibernate.cfgを使用して、指定された領域を使用するようにすべてのエンティティを構成するか、または指定された領域を使用するために各エンティティを構成できます。しかし、キャッシュ領域をregionAとして持つクエリで参照されているエンティティのみを指定することはできません。右? – ulab