2015-01-21 3 views
6

Я использую WildFly 8,1 так JPA 2.1 и Hibernate 4.3.5JPA общий кэш/кэш второго уровня в WildFly

Я хочу использовать JPA общий кэш/кэш второго уровня в WildFly

Я следую WildFly документация: https://docs.jboss.org/author/display/WFLY8/JPA+Reference+Guide#JPAReferenceGuide-UsingtheInfinispansecondlevelcache

вот мой persitience.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="myAppPU" transaction-type="JTA"> 
    <jta-data-source>java:/jdbc/myAppDS</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
    <properties> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="org.hibernate.flushMode" value="MANUAL"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

Я установить свойство hibernate.cache.use_second_level_cache истина и установить общий-кэш-режим ENABLE_SELECTIVE

и юридические лица (@Entity) Я хочу кэшированных аннотируются @Cacheable (правда), как это:

@Entity 
@Cacheable(true) 
public class Tooltip implements Serializable { 
    @Id 
    private String path ; 
    private String description ; 
    private Boolean rendered ; 
    //... 
} 

Но каждый раз, когда я посещаю hibernate веб-страницы генерирует много выбора, чтобы получить все сущности, которые я указываю как @Cacheable (true), даже если я уже посещаю страницу (в том же сеансе).

Таким образом, кажется, что общий кэш/кэш второго уровня не работает

ли я что-то пропустил?


Спасибо hwellmann

Я пытался поставить hibernate.cache.use_query_cache истина в persitence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> 
    <persistence-unit name="myAppPU" transaction-type="JTA"> 
    <jta-data-source>java:/jdbc/myAppDS</jta-data-source> 
    <exclude-unlisted-classes>false</exclude-unlisted-classes> 
    <shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode> 
    <properties> 
     <property name="hibernate.show_sql" value="true"/> 
     <property name="hibernate.format_sql" value="true"/> 
     <property name="hibernate.cache.use_second_level_cache" value="true"/> 
     <property name="hibernate.cache.use_query_cache" value="true" /> 
     <property name="org.hibernate.flushMode" value="MANUAL"/> 
    </properties> 
    </persistence-unit> 
</persistence> 

и и намек в запросе я использую

@Entity 
@NamedQueries({ 
    @NamedQuery(name = "FieldInfos.findAll", query = "SELECT i FROM FieldInfos i", hints = {@QueryHint(name="org.hibernate.cacheable",value="true")}), 
    @NamedQuery(name = "FieldInfos.findByPath", query = "SELECT i FROM FieldInfos i WHERE i.path = :path", hints = {@QueryHint(name="org.hibernate.cacheable",value="true")}) 
}) 
@Cacheable(true) 
public class FieldInfos implements Serializable { 
    //... 
} 

но проблема остается

Я также пробовал с новой версией WildFly: 8.2, поэтому Hibernate 4.3.7, но проблема осталась слишком

+0

Вы решили свою проблему? –

+0

Включили ли вы статистику и проверили консоль управления WildFly> Runtime> вкладка JPA? –

ответ

2

Кэш второго уровня влияет только на поиск прямого объекта, соответствующий EntityManager.find().

Если вы пытаетесь избежать всякого рода SELECT запросов затрагивая кэшированные объекты, вам также необходимо включить кэш запросов:

<property name="hibernate.cache.use_query_cache" value="true" /> 

и вам необходимо установить подсказку запроса org.hibernate.cacheable=true для каждого запроса к быть кешированным.

+0

Спасибо, но, к сожалению, это не сработало для меня, я редактирую свой пост, чтобы объяснить – kwisatz

+0

Настройка кэширования в запросе важна, может быть, вы можете показать код клиента, чтобы убедиться, что вы делаете это правильно? Кроме того, включите ведение журнала TRACE для 'org.hibernate' и, возможно, даже' org.infinispan', чтобы узнать, что именно происходит. Также поможет помощь в использовании кода с удаленным отладчиком. –

Смежные вопросы