JPA + Hibernate + EHCache, неожиданное поведение

Я пытаюсь внедрить EHCache в свой рабочий прототип, где у меня есть javax.persistence.Entity , представляющая таблицу в моей базе данных (MySQL, mysql -коннектор -java -5.1.20.jar ), которые предоставляются потребителям в виде XML.

Проблема, с которой я столкнулся, заключается в том, что Hibernate все еще извлекает данные из базы данных, даже когда EHCache сохраняет результат запроса в памяти .

Я использую монитор EHCache , чтобы увидеть количество элементов в памяти и изменить данные непосредственно в базе данных до истечения срока действия кеша, чтобы узнать, действительно ли используются кэшированные данные.

Я безуспешно искал репликацию для этой проблемы, так что, возможно, я что-то упустил (Я просто вхожу в мир Java ).

Мои файлы

pom.xml


    org.hibernate
    hibernate-validator
    4.3.0.Final


    org.hibernate
    hibernate-entitymanager
    4.1.4.Final


    org.hibernate
    hibernate-ehcache
    4.1.4.Final


    net.sf.ehcache
    ehcache-core
    2.5.2


    org.terracotta
    ehcache-probe
    1.0.2

Класс сущности

package myPrototype.entities

import javax.persistence.Cacheable;
import javax.persistence.Entity;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.xml.bind.annotation.XmlRootElement;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;

@Entity @Cacheable
@Cache(usage=CacheConcurrencyStrategy.READ_ONLY)
@Table(name = "Cars")
@XmlRootElement
@NamedQueries({
    @NamedQuery(name = "Cars.findAll", query = "SELECT d FROM Cars d"),
    [...]
public class Cars implements Serializable {
    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
        @NotNull
        @Column(name = "id")
    @ReferenceField
    private int id;
    [...]

ehcache.xml



  

*Я попытался установить вечный = "true", но результат все тот же

постоянство.xml



  
    org.hibernate.ejb.HibernatePersistence
    java:app/jdbc/mysqlserver/prototype
    false
    ENABLE_SELECTIVE
    
      
      
      
      
      
    
  

*Я пробовал переключаться между SingletonEhCacheRegionFactory и EhCacheRegionFactory

. EJB

import myPrototype.entities.Cars
import java.util.Date;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@Stateless
public class CarsEJB {

    @PersistenceContext(unitName="MyPrototype")
    private EntityManager em;

    @Override
    public List getCars() {
        return (List)em.createNamedQuery("Cars.findAll").setMaxResults(200).getResultList();
    }

}

*Добавлено, чтобы уточнить, как я запускаю запрос

Как я уже сказал, я могу видеть количество элементов в памяти через монитор EHCache, поэтому я отметил следующее: -Срок действия загруженных элементов конфигурации ehcache истекает -Срок действия элементов не сбрасывается при выполнении запроса, пока они еще живы (срок их действия истек через N секунд после первого запроса ).

Очередной раз; Я новичок в java, поэтому предположим, что мне могут не хватать основных понятий.

Спасибо за чтение!

7
задан emdagon 19 July 2012 в 15:48
поделиться