Skip to content

Commit 9cc68a5

Browse files
Add read-only query support in CrudService and related classes
1 parent ccb1cc4 commit 9cc68a5

5 files changed

Lines changed: 58 additions & 1 deletion

File tree

platform/core/domain-jpa/src/main/java/tools/dynamia/domain/jpa/JpaCrudService.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -379,6 +379,13 @@ public <T> List<T> find(Class<T> type, QueryParameters parameters) {
379379
return executeQuery((QueryBuilder) null, parameters);
380380
}
381381

382+
@Transactional(readOnly = true)
383+
@Override
384+
public <T> List<T> findReadOnly(Class<T> type, QueryParameters parameters) {
385+
parameters.setReadOnly(true);
386+
return find(type, parameters);
387+
}
388+
382389
/*
383390
* (non-Javadoc)
384391
*
@@ -566,6 +573,13 @@ public List find(QueryMetadata queryMetada) {
566573
return mapResultsToBeanMaps(queryMetada.getQueryBuilder(), query.getResultList());
567574
}
568575

576+
@Transactional(readOnly = true)
577+
@Override
578+
public List findReadOnly(QueryMetadata queryMetadata) {
579+
queryMetadata.getParameters().setReadOnly(true);
580+
return find(queryMetadata);
581+
}
582+
569583
/*
570584
* (non-Javadoc)
571585
*

platform/core/domain/src/main/java/tools/dynamia/domain/query/DataPaginatorPagedListDataSource.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,11 @@ private void loadPage() {
107107
public List<T> loadActivePageData() {
108108
CrudService crudService = Containers.get().findObject(CrudService.class);
109109
//noinspection unchecked
110-
return (List<T>) crudService.find(getQueryMetadata());
110+
if(getQueryMetadata().getParameters().isReadOnly()){
111+
return (List<T>) crudService.findReadOnly(getQueryMetadata());
112+
}else {
113+
return (List<T>) crudService.find(getQueryMetadata());
114+
}
111115
}
112116

113117
/* (non-Javadoc)

platform/core/domain/src/main/java/tools/dynamia/domain/query/QueryParameters.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,8 @@ public class QueryParameters extends HashMap<String, Object> implements Serializ
4848

4949
private QueryParameters nestedParameters;
5050

51+
private boolean readOnly;
52+
5153
public QueryParameters() {
5254
}
5355

@@ -546,4 +548,12 @@ public <T> QueryParameters add(String key, Class<T> clazz, T value) {
546548
}
547549

548550

551+
public boolean isReadOnly() {
552+
return readOnly;
553+
}
554+
555+
public QueryParameters setReadOnly(boolean readOnly) {
556+
this.readOnly = readOnly;
557+
return this;
558+
}
549559
}

platform/core/domain/src/main/java/tools/dynamia/domain/services/CrudService.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
*/
1717
package tools.dynamia.domain.services;
1818

19+
import org.springframework.transaction.annotation.Transactional;
1920
import tools.dynamia.commons.BeanSorter;
2021
import tools.dynamia.commons.Callback;
2122
import tools.dynamia.domain.query.DataPaginator;
@@ -238,6 +239,16 @@ public interface CrudService {
238239
*/
239240
<T> List<T> find(Class<T> type, QueryParameters parameters);
240241

242+
/**
243+
* Find entities using parameters, the returned entities are in read only mode, this is usefull for reports and read only data.
244+
*
245+
* @param <T> the generic type
246+
* @param type the type
247+
* @param parameters the parameters
248+
* @return the list
249+
*/
250+
<T> List<T> findReadOnly(Class<T> type, QueryParameters parameters);
251+
241252
/**
242253
* Execute query.
243254
*
@@ -439,6 +450,14 @@ default int execute(QueryBuilder query) {
439450
*/
440451
<T> T findSingle(Class<T> entityClass, QueryParameters params);
441452

453+
/**
454+
* Find using query metadata
455+
*
456+
* @param queryMetadata metada
457+
* @return result
458+
*/
459+
List findReadOnly(QueryMetadata queryMetadata);
460+
442461
/**
443462
* find objects using fields.
444463
*

platform/core/domain/src/main/java/tools/dynamia/domain/services/impl/AbstractCrudService.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -405,4 +405,14 @@ protected enum EventType {
405405
public <T> T getFieldValue(Object entity, String fieldName, Class<T> fieldClass) {
406406
throw new UnsupportedOperationException("Method not supported in this CrudService");
407407
}
408+
409+
@Override
410+
public List findReadOnly(QueryMetadata queryMetadata) {
411+
return find(queryMetadata);
412+
}
413+
414+
@Override
415+
public <T> List<T> findReadOnly(Class<T> type, QueryParameters parameters) {
416+
return find(type, parameters);
417+
}
408418
}

0 commit comments

Comments
 (0)