Skip to content

Commit c6cfd12

Browse files
authored
Merge pull request #314 from devgateway/feature/jpa-query-cache-dgtkit3
#311 Cache hibernate queries from JPA repositories dgtkit-3
2 parents b34621e + 38efd5a commit c6cfd12

File tree

7 files changed

+77
-6
lines changed

7 files changed

+77
-6
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

+4
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,8 @@
1414
<jcache:mbeans enable-management="true" enable-statistics="true"/>
1515
</ehcache:cache>
1616

17+
<ehcache:cache alias="default-update-timestamps-region" uses-template="template" />
18+
19+
<ehcache:cache alias="default-query-results-region" uses-template="template" />
20+
1721
</ehcache:config>

persistence/src/main/resources/liquibase-changelog.xml

+1-2
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,10 @@
7575
<changeSet id="dgtkit-#291-autosave" author="mpostelnicu">
7676
<preConditions onFail="CONTINUE">
7777
<columnExists tableName="admin_settings" columnName="autosave_time"/>
78-
<sqlCheck expectedResult="true">select autosave_time is null from admin_settings</sqlCheck>
7978
</preConditions>
8079

8180
<update tableName="admin_settings">
82-
<column name="autosave_time" value="10"/>
81+
<column name="autosave_time" valueNumeric="10"/>
8382
<where>autosave_time is null</where>
8483
</update>
8584
</changeSet>

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

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

10-
import java.io.Serializable;
1110
import java.util.List;
1211
import java.util.Optional;
1312

@@ -34,7 +33,6 @@ public boolean existsById(Long aLong) {
3433
return false;
3534
}
3635

37-
3836
@Override
3937
public List findAll() {
4038
return null;
@@ -164,6 +162,4 @@ public long count(Example example) {
164162
public boolean exists(Example example) {
165163
return false;
166164
}
167-
168-
169165
}

0 commit comments

Comments
 (0)