我不知道這是否是一個真正的問題,或者它只是配置的問題,但我可以在我的日誌控制檯上看到休眠命中(或至少拋出select
查詢)即使在高速緩存命中。休眠拋出查詢甚至在緩存命中
我檢查緩存工作正常的Ehcache顯示器上,它一定要求登記命中100%。但我總是看到日誌中的查詢。
所有實體anotated如圖所示:
@Entity
@Cacheable
@Cache(usage = READ_WRITE)
@Table(name = "city")
//@NamedQuery(name = "city.findById", query = "from City where ID = :id")
public class City extends Audit implements Serializable {
我ehcache.xml中
<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd"
dynamicConfig="true" monitoring="autodetect">
<!-- Location of persistent caches on disk -->
<diskStore path="java.io.tmpdir/MxlServiceLayer" />
<cacheManagerPeerListenerFactory
class="org.terracotta.ehcachedx.monitor.probe.ProbePeerListenerFactory"
properties="monitorAddress=localhost, monitorPort=9889, memoryMeasurement=true" />
<defaultCache eternal="false" maxElementsInMemory="1000"
overflowToDisk="false" diskPersistent="false" timeToIdleSeconds="0"
timeToLiveSeconds="600" memoryStoreEvictionPolicy="LRU" statistics="true" />
<cache name="authToken" eternal="false" maxElementsInMemory="100"
overflowToDisk="false" diskPersistent="true" timeToIdleSeconds="0"
timeToLiveSeconds="31536000" memoryStoreEvictionPolicy="LRU"
statistics="true" />
</ehcache>
而我在看到我一遍又一遍......
休眠:選擇city0_.ID作爲ID2_,city0_.CREATED作爲CREATED2_, city0_.CREATOR作爲CREATOR2_,city0_.MODIFIED作爲MODIFIED2_, city0_.MODIFIER as MODIFIER2_,city0_.NAME as NAME2_,city0_.state_fk as state7_2_ from city city0_ where State_fk =?
是冬眠真的擊中DB?任何人都可以向我解釋這一點嗎?
我使用:
JPA 2.0在Spring數據JPA 1.2.0
的Ehcache 2.6.0
春3.2.1
你的方法似乎是正確的,但因爲我使用Spring Data的JPA,所以它目前不支持查詢緩存。 –
@ AminAbu-Taleb即使在spring數據jpa中,也可以使用QueryHint來告訴使用hibernate查詢緩存。 – FranXho