Hi
Ich würde gerne den Second Level Cache aktivieren. Aber irgendwie funktioniert das noch nicht richtig :-(
Dazu habe ich folgende Einstellungen vorgenommen:
hibernate.cfg.xml
Code:
<property name="hibernate.generate_statistics">true</property>
<property name="hibernate.cache.provider_class">net.sf.ehcache.hibernate.EhCacheProvider</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
ehcache.xml
Code:
<ehcache>
<defaultCache
maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/>
<cache name="persistenzschicht.Student"
maxElementsInMemory="1000"
eternal="true"
timeToIdleSeconds="0"
timeToLiveSeconds="0"
overflowToDisk="false"
/>
</ehcache>
Student.java
Code:
@Entity
@Table(name = "STUDENT")
@Cache(usage=org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE)
public class Student {...}
Ich führe eine einfach Abfrage mehrmals in einer gleichen Session aus. Wenn ich mir dann die Statistiken angucke, wird folgendes angezeigt:
start time=1205421628482,
sessions opened=1,
sessions closed=0,
transactions=1,
successful transactions=1,
optimistic lock failures=0,
flushes=0,
connections obtained=1,
statements prepared=1,
statements closed=1,
second level cache puts=0,
second level cache hits=0,
second level cache misses=0,
entities loaded=0,
entities updated=0,
entities inserted=0,
entities deleted=0,
entities fetched=0,
collections loaded=0,
collections updated=0,
collections removed=0,
collections recreated=0,
collections fetched=0,
queries executed to database=1,
query cache puts=0,
query cache hits=0,
query cache misses=0,
max query time=172
Der Second Level Cache ist also nicht aktiv. Ich habe folgende Vermutung und würde gerne wissen, ob ich damit richtig liege.
Da ich jedes Mal die gleiche Abfrage in einer gleichen Session durchführe, wird nur auf den First Level Cache zugegriffen. Die Objekte werden daraus geladen und der Second Level Cache wird nicht beachtet.
Wenn ich mit dieser Vermutung richtig liege, müsste ich doch einen weiteren Thread erstellen, der eine neue Session öffnet. Dieser würde doch dann den Second Level Cache nutzen, oder?
Dann habe ich noch eine weitere Frage. Kann man in der ehcache.xml anstatt Klassen auch packages angeben. Also z.B.
<cache name="package"...
Danke!