Skip to content

Commit

Permalink
6 09 hibernate cache
Browse files Browse the repository at this point in the history
  • Loading branch information
JolaPsh committed Aug 3, 2018
1 parent 2a3a80e commit 3b51b4c
Show file tree
Hide file tree
Showing 5 changed files with 47 additions and 0 deletions.
5 changes: 5 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,11 @@
<artifactId>hibernate-validator</artifactId>
<version>${hibernate-validator.version}</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-jcache</artifactId>
<version>${hibernate.version}</version>
</dependency>

<!--http://hibernate.org/validator/documentation/getting-started/#unified-expression-language-el-->
<dependency>
Expand Down
4 changes: 4 additions & 0 deletions src/main/java/ru/javawebinar/topjava/model/User.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package ru.javawebinar.topjava.model;

import org.hibernate.annotations.BatchSize;
import org.hibernate.annotations.Cache;
import org.hibernate.annotations.CacheConcurrencyStrategy;
import org.hibernate.validator.constraints.Range;
import org.springframework.util.CollectionUtils;

Expand All @@ -13,6 +15,7 @@

import static ru.javawebinar.topjava.util.MealsUtil.DEFAULT_CALORIES_PER_DAY;

@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@NamedQueries({
@NamedQuery(name = User.DELETE, query = "DELETE FROM User u WHERE u.id=:id"),
@NamedQuery(name = User.BY_EMAIL, query = "SELECT u FROM User u LEFT JOIN FETCH u.roles WHERE u.email=?1"),
Expand Down Expand Up @@ -45,6 +48,7 @@ public class User extends AbstractNamedEntity {
@NotNull
private Date registered = new Date();

@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "user_roles", joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "role")
Expand Down
22 changes: 22 additions & 0 deletions src/main/java/ru/javawebinar/topjava/repository/JpaUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package ru.javawebinar.topjava.repository;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

public class JpaUtil {

@PersistenceContext
private EntityManager em;

public void clear2ndLevelHibernateCache() {
Session s = (Session) em.getDelegate();
SessionFactory sf = s.getSessionFactory();
// sf.evict(User.class);
// sf.getCache().evictEntity(User.class, BaseEntity.START_SEQ);
// sf.getCache().evictEntityRegion(User.class);
sf.getCache().evictAllRegions();
}
}
11 changes: 11 additions & 0 deletions src/main/resources/spring/spring-db.xml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,15 @@
<entry key="#{T(org.hibernate.cfg.AvailableSettings).USE_SQL_COMMENTS}"
value="${hibernate.use_sql_comments}"/>
<!--<entry key="#{T(org.hibernate.cfg.AvailableSettings).HBM2DDL_AUTO}" value="${hibernate.hbm2ddl.auto}"/>-->

<!--https://github.com/hibernate/hibernate-orm/blob/master/documentation/src/main/asciidoc/userguide/chapters/caching/Caching.adoc#caching-provider-jcache-->
<entry key="#{T(org.hibernate.cfg.AvailableSettings).CACHE_REGION_FACTORY}"
value="org.hibernate.cache.jcache.internal.JCacheRegionFactory"/>
<entry key="#{T(org.hibernate.cache.jcache.ConfigSettings).PROVIDER}"
value="org.ehcache.jsr107.EhcacheCachingProvider"/>
<entry key="#{T(org.hibernate.cfg.AvailableSettings).USE_SECOND_LEVEL_CACHE}" value="true"/>
<entry key="#{T(org.hibernate.cfg.AvailableSettings).USE_QUERY_CACHE}"
value="false"/> <!--default-->
</map>
</property>

Expand All @@ -78,6 +87,8 @@
<!-- Transaction manager for a single JPA EntityManagerFactory (alternative to JTA) -->
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
p:entityManagerFactory-ref="entityManagerFactory"/>

<bean class="ru.javawebinar.topjava.repository.JpaUtil"/>
</beans>

<beans profile="jpa">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import org.springframework.dao.DataAccessException;
import ru.javawebinar.topjava.model.Role;
import ru.javawebinar.topjava.model.User;
import ru.javawebinar.topjava.repository.JpaUtil;
import ru.javawebinar.topjava.util.exception.NotFoundException;

import javax.validation.ConstraintViolationException;
Expand All @@ -24,9 +25,13 @@ public abstract class AbstractUserServiceTest extends AbstractServiceTest {
@Autowired
private CacheManager cacheManager;

@Autowired
protected JpaUtil jpaUtil;

@Before
public void setUp() throws Exception {
cacheManager.getCache("users").clear();
jpaUtil.clear2ndLevelHibernateCache();
}

@Test
Expand Down

0 comments on commit 3b51b4c

Please sign in to comment.