diff --git a/pom.xml b/pom.xml index b2dde5af..2fdbf2a0 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,7 @@ - 44.0.0 + 44.1.0-SNAPSHOT org.gridsuite.shortcircuit.server 1.0.5 5.0.0-alpha.14 diff --git a/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FaultResultSpecificationBuilder.java b/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FaultResultSpecificationBuilder.java index 5c437948..3c5d4d94 100644 --- a/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FaultResultSpecificationBuilder.java +++ b/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FaultResultSpecificationBuilder.java @@ -49,7 +49,7 @@ public Specification buildSpecification(UUID resultUuid, List // since sql joins generates duplicate results, we need to use distinct here Specification specification = SpecificationUtils.distinct(); // filter by resultUuid - specification = specification.and(Specification.where(resultUuidEquals(resultUuid))); + specification = specification.and(resultUuidEquals(resultUuid)); return SpecificationUtils.appendFiltersToSpecification(specification, resourceFilters); } @@ -57,7 +57,7 @@ public Specification buildSpecification(UUID resultUuid, List public Specification buildFeedersSpecification(List uuids, List resourceFilters) { List childrenResourceFilter = resourceFilters.stream().filter(this::isNotParentFilter) .toList(); - Specification specification = Specification.where(uuidIn(uuids)); + Specification specification = uuidIn(uuids); return SpecificationUtils.appendFiltersToSpecification(specification, childrenResourceFilter); } diff --git a/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FeederResultSpecificationBuilder.java b/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FeederResultSpecificationBuilder.java index e49acf7e..a029ee30 100644 --- a/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FeederResultSpecificationBuilder.java +++ b/src/main/java/org/gridsuite/shortcircuit/server/repositories/specifications/FeederResultSpecificationBuilder.java @@ -29,7 +29,7 @@ public static Specification resultUuidEquals(UUID value) { } public static Specification buildSpecification(UUID resultUuid, List resourceFilters) { - Specification specification = Specification.where(resultUuidEquals(resultUuid)); + Specification specification = resultUuidEquals(resultUuid); return SpecificationUtils.appendFiltersToSpecification(specification, resourceFilters); } } diff --git a/src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitAnalysisResultService.java b/src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitAnalysisResultService.java index 2e4ed455..949f1aef 100644 --- a/src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitAnalysisResultService.java +++ b/src/main/java/org/gridsuite/shortcircuit/server/service/ShortCircuitAnalysisResultService.java @@ -285,12 +285,26 @@ public Page findFaultResultsPage(ShortCircuitAnalysisResultEn // cf. https://vladmihalcea.com/fix-hibernate-hhh000104-entity-fetch-pagination-warning-message/ // We must separate in two requests, one with pagination the other one with Join Fetch - Page uuidPage = faultResultRepository.findBy(specification, q -> - q.project(FaultResultEntity.Fields.faultResultUuid) - .as(FaultResultRepository.EntityId.class) - .sortBy(modifiedPageable.getSort()) - .page(modifiedPageable) - ); + List projectionProperties = new ArrayList<>(); + projectionProperties.add(FaultResultEntity.Fields.faultResultUuid); + + for (Sort.Order order : modifiedPageable.getSort()) { + String property = order.getProperty(); + if (!property.equals(FaultResultEntity.Fields.faultResultUuid) && !projectionProperties.contains(property)) { + projectionProperties.add(property); + } + } + + Page uuidPage = faultResultRepository.findBy(specification, q -> { + var query = q.as(FaultResultRepository.EntityId.class) + .sortBy(modifiedPageable.getSort()); + if (projectionProperties.size() == 1) { + query = query.project(FaultResultEntity.Fields.faultResultUuid); + } else { + query = query.project(projectionProperties.toArray(new String[0])); + } + return query.page(modifiedPageable); + }); if (!uuidPage.hasContent()) { return Page.empty();