Hibernate EhCache с JPA - PullRequest
       17

Hibernate EhCache с JPA

0 голосов
/ 17 октября 2019

У меня есть объект Employee вместе с именованным запросом ниже:

@NamedQueries({     @NamedQuery(name="findMyEmployees", query="SELECT e FROM Employee e",           hints={@QueryHint(name="org.hibernate.cacheable",  value="true"),
                    @QueryHint(name = "org.hibernate.cacheRegion", value = "myCacheRegion"),
                    @QueryHint(name = "org.hibernate.RetrieveMode", value = "USE")
                    }), })

@Entity @Cache(region="myCacheRegion", usage=CacheConcurrencyStrategy.READ_ONLY) public class Employee{
    @Id
    @GeneratedValue
    private long id;
    private String name;
    private String dept; ... ... }

Сохранение моих сотрудников, как показано ниже в цикле:

Employee employee = new Employee();
employee.setName("Name");
employee.setDept("Department");
EntityManager em = entityManagerFactory.createEntityManager();
em.setProperty("javax.persistence.cache.storeMode", CacheStoreMode.USE);
em.getTransaction().begin();
em.persist(employee);
em.getTransaction().commit();
em.close();

Получение результатов запроса, как показано ниже:

EntityManager em = entityManagerFactory.createEntityManager();  
Query q = em.createNamedQuery("findMyEmployees");   
return (Collection<Employee>) q.getResultList();

Результаты кэшируются. Теперь, удалив одного из сотрудников, как показано ниже:

EntityManager em = entityManagerFactory.createEntityManager();
Employee employee = em.find(Employee.class, id);
em.setProperty("javax.persistence.cache.storeMode", CacheStoreMode.BYPASS);
em.getTransaction().begin();
em.remove(employee);
em.getTransaction().commit();

Когда я снова пытаюсь получить сотрудников, попадание направляется в базу данных, а не в кэш. Запрос о помощи

My persistence.xml:

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>  
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<properties>
    <property name="javax.persistence.schema-generation.database.action" value="create"/>
    <property name="javax.persistence.jdbc.driver" value="org.h2.Driver"/>
    <property name="javax.persistence.jdbc.url" value="jdbc:h2:mem:test;DB_CLOSE_DELAY=-1"/>
    <property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.EhCacheRegionFactory"/>
<property name="hibernate.cache.region_prefix" value=""/>
    <property name="hibernate.cache.use_query_cache" value="true"/>
    <property name="hibernate.show_sql" value="true"/>
    <property name="org.hibernate.flushMode" value="COMMIT"/>   
</properties>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...