Skip to content

Commit eb370e0

Browse files
committed
#311 Cache hibernate queries from JPA repositories
1 parent c18def7 commit eb370e0

File tree

6 files changed

+93
-0
lines changed

6 files changed

+93
-0
lines changed

persistence/src/main/java/org/devgateway/toolkit/persistence/application.properties

+1
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ spring.jpa.hibernate.jdbc.batch_versioned_data=true
2727
spring.jpa.hibernate.bytecode.use_reflection_optimizer=true
2828
spring.jpa.hibernate.bytecode.provider=javassist
2929
spring.jpa.hibernate.cache.use_query_cache=true
30+
spring.jpa.properties.hibernate.cache.use_second_level_cache=true
3031
spring.servlet.multipart.enabled = false
3132

3233
#enable modified flag for envers, to track field-level modifications
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.devgateway.toolkit.persistence.repository;
2+
3+
import java.lang.annotation.ElementType;
4+
import java.lang.annotation.Retention;
5+
import java.lang.annotation.RetentionPolicy;
6+
import java.lang.annotation.Target;
7+
8+
import javax.persistence.QueryHint;
9+
10+
import org.springframework.data.jpa.repository.QueryHints;
11+
12+
/**
13+
* @author Octavian Ciubotaru
14+
*/
15+
@Target({ ElementType.METHOD, ElementType.ANNOTATION_TYPE })
16+
@Retention(RetentionPolicy.RUNTIME)
17+
@QueryHints({@QueryHint(name = "org.hibernate.cacheable", value = "true")})
18+
public @interface CacheHibernateQueryResult {
19+
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,63 @@
11
package org.devgateway.toolkit.persistence.repository.norepository;
22

3+
import org.devgateway.toolkit.persistence.repository.CacheHibernateQueryResult;
4+
import org.springframework.data.domain.Page;
5+
import org.springframework.data.domain.Pageable;
6+
import org.springframework.data.domain.Sort;
7+
import org.springframework.data.jpa.domain.Specification;
38
import org.springframework.data.jpa.repository.JpaRepository;
49
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
510
import org.springframework.data.repository.NoRepositoryBean;
11+
import org.springframework.lang.Nullable;
612

713
import java.io.Serializable;
14+
import java.util.List;
15+
import java.util.Optional;
816

917
/**
1018
* Created by Octavian on 01.07.2016.
1119
*/
1220
@NoRepositoryBean
1321
public interface BaseJpaRepository<T, ID extends Serializable>
1422
extends JpaRepository<T, ID>, JpaSpecificationExecutor<T> {
23+
24+
@Override
25+
@CacheHibernateQueryResult
26+
List<T> findAll();
27+
28+
@Override
29+
@CacheHibernateQueryResult
30+
List<T> findAll(Sort sort);
31+
32+
@Override
33+
@CacheHibernateQueryResult
34+
List<T> findAll(Specification<T> spec);
35+
36+
@Override
37+
@CacheHibernateQueryResult
38+
Page<T> findAll(Specification<T> spec, Pageable pageable);
39+
40+
@Override
41+
@CacheHibernateQueryResult
42+
Page<T> findAll(Pageable pageable);
43+
44+
@Override
45+
@CacheHibernateQueryResult
46+
List<T> findAll(Specification<T> spec, Sort sort);
47+
48+
@Override
49+
@CacheHibernateQueryResult
50+
Optional<T> findOne(@Nullable Specification<T> spec);
51+
52+
@Override
53+
@CacheHibernateQueryResult
54+
long count(Specification<T> spec);
55+
56+
@Override
57+
@CacheHibernateQueryResult
58+
long count();
59+
60+
@Override
61+
@CacheHibernateQueryResult
62+
Optional<T> findById(ID id);
1563
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
2+
# Uncomment for Hibernate SQL statements and parameters
3+
#logging.level.org.hibernate.SQL=DEBUG
4+
#logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE

persistence/src/main/resources/ehcache.xml

+15
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,19 @@
5050
maxEntriesLocalHeap="100000"
5151
statistics="true">
5252
</cache>
53+
54+
<cache name="default-update-timestamps-region"
55+
eternal="true"
56+
diskPersistent="false"
57+
maxEntriesLocalHeap="10000"
58+
statistics="true">
59+
</cache>
60+
61+
<cache name="default-query-results-region"
62+
eternal="true"
63+
diskPersistent="false"
64+
maxEntriesLocalHeap="10000"
65+
statistics="true">
66+
</cache>
67+
5368
</ehcache>

persistence/src/test/java/org/devgateway/toolkit/persistence/excel/test/TestAddressRepository.java

+6
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.springframework.data.domain.Sort;
88
import org.springframework.data.jpa.domain.Specification;
99

10+
import java.io.Serializable;
1011
import java.util.List;
1112
import java.util.Optional;
1213

@@ -161,4 +162,9 @@ public long count(Example example) {
161162
public boolean exists(Example example) {
162163
return false;
163164
}
165+
166+
@Override
167+
public Optional findById(Serializable serializable) {
168+
return Optional.empty();
169+
}
164170
}

0 commit comments

Comments
 (0)