Skip to content

Commit 1e5d1ff

Browse files
Merge pull request #392 from OpenElements/jpametamodel
Provide JPA metamodel for better queries
2 parents 63a1eca + c2e017f commit 1e5d1ff

4 files changed

Lines changed: 40 additions & 56 deletions

File tree

pom.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,13 @@
245245
<compilerArgs>
246246
<arg>-parameters</arg>
247247
</compilerArgs>
248+
<annotationProcessorPaths>
249+
<path>
250+
<groupId>org.hibernate.orm</groupId>
251+
<artifactId>hibernate-jpamodelgen</artifactId>
252+
<version>6.5.2.Final</version>
253+
</path>
254+
</annotationProcessorPaths>
248255
</configuration>
249256
</plugin>
250257
<plugin>

server/src/main/java/com/openelements/benchscape/server/store/entities/MeasurementEntity.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.openelements.benchscape.server.store.entities;
22

33
import com.openelements.benchscape.jmh.model.BenchmarkUnit;
4-
import com.openelements.server.base.data.AbstractEntity;
54
import com.openelements.server.base.tenantdata.AbstractEntityWithTenant;
65
import jakarta.persistence.CascadeType;
7-
import jakarta.persistence.CollectionTable;
86
import jakarta.persistence.Column;
97
import jakarta.persistence.Entity;
108
import jakarta.persistence.FetchType;

server/src/main/java/com/openelements/benchscape/server/store/repositories/EnvironmentRepository.java

Lines changed: 28 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
11
package com.openelements.benchscape.server.store.repositories;
22

3-
import com.openelements.benchscape.server.store.data.EnvironmentQuery;
43
import com.openelements.benchscape.server.store.data.OperationSystem;
5-
import com.openelements.benchscape.server.store.data.SystemMemory;
64
import com.openelements.benchscape.server.store.entities.EnvironmentEntity;
5+
import com.openelements.benchscape.server.store.entities.EnvironmentEntity_;
76
import com.openelements.server.base.tenantdata.EntityWithTenantRepository;
8-
import edu.umd.cs.findbugs.annotations.NonNull;
97
import jakarta.persistence.criteria.Predicate;
10-
import java.util.ArrayList;
11-
import java.util.List;
128
import org.springframework.data.jpa.domain.Specification;
139
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
1410
import org.springframework.stereotype.Repository;
1511

12+
import java.util.ArrayList;
13+
import java.util.List;
14+
1615
@Repository
1716
public interface EnvironmentRepository extends EntityWithTenantRepository<EnvironmentEntity>,
1817
JpaSpecificationExecutor<EnvironmentEntity> {
1918

2019
default List<EnvironmentEntity> findFilteredEnvironments(String name, String gitOriginUrl, String gitBranch, String systemArch,
2120
Integer systemProcessors, Integer systemProcessorsMin,
22-
Integer systemProcessorsMax, OperationSystem osFamily, String osName, String osVersion, String jvmVersion,
21+
Integer systemProcessorsMax, OperationSystem osFamily,
22+
String osName, String osVersion, String jvmVersion,
2323
String jvmName, String jmhVersion) {
2424
return findAll(createSpecificationForQuery(name, gitOriginUrl, gitBranch, systemArch,
2525
systemProcessors, systemProcessorsMin, systemProcessorsMax,
@@ -35,71 +35,53 @@ private static Specification<EnvironmentEntity> createSpecificationForQuery(Stri
3535
return (root, criteriaQuery, criteriaBuilder) -> {
3636
List<Predicate> predicates = new ArrayList<>();
3737

38-
final String SYSTEM_ARCH_QUERY_FIELD = "systemArch";
39-
final String GIT_ORIGIN_URL_QUERY_FIELD = "gitOriginUrl";
40-
final String GIT_BRANCH_QUERY_FIELD = "gitBranch";
41-
final String SYSTEM_PROCESSORS_QUERY_FIELD = "systemProcessors";
42-
final String SYSTEM_PROCESSORS_MIN_QUERY_FIELD = "systemProcessorsMin";
43-
final String SYSTEM_PROCESSORS_MAX_QUERY_FIELD = "systemProcessorsMax";
44-
final String SYSTEM_MEMORY_QUERY_FIELD = "systemMemory";
45-
final String SYSTEM_MEMORY_MIN_QUERY_FIELD = "systemMemoryMin";
46-
final String SYSTEM_MEMORY_MAX_QUERY_FIELD = "systemMemoryMax";
47-
final String OS_NAME_QUERY_FIELD = "osName";
48-
final String OS_VERSION_QUERY_FIELD = "osVersion";
49-
final String JVM_VERSION_QUERY_FIELD = "jvmVersion";
50-
final String JVM_NAME_QUERY_FIELD = "jvmName";
51-
final String OS_FAMILY_QUERY_FIELD = "osFamily";
52-
final String JMH_VERSION_QUERY_FIELD = "jmhVersion";
53-
5438
if (name != null) {
55-
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get("name")), "%" + name.toLowerCase() + "%"));
39+
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(EnvironmentEntity_.name)), "%" +
40+
name.toLowerCase() + "%"));
5641
}
5742
if (gitOriginUrl != null) {
58-
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(GIT_ORIGIN_URL_QUERY_FIELD)), "%" + gitOriginUrl.toLowerCase() + "%"));
43+
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(EnvironmentEntity_.gitOriginUrl)), "%" +
44+
gitOriginUrl.toLowerCase() + "%"));
5945
}
6046
if (gitBranch != null) {
61-
predicates.add(criteriaBuilder.equal(criteriaBuilder.lower(root.get(GIT_BRANCH_QUERY_FIELD)), gitBranch.toLowerCase()));
47+
predicates.add(criteriaBuilder.equal(criteriaBuilder.lower(root.get(EnvironmentEntity_.gitBranch)),
48+
gitBranch.toLowerCase()));
6249
}
6350
if (systemArch != null) {
64-
predicates.add(criteriaBuilder.equal(criteriaBuilder.lower(root.get(SYSTEM_ARCH_QUERY_FIELD)), systemArch.toLowerCase()));
51+
predicates.add(criteriaBuilder.equal(criteriaBuilder.lower(root.get(EnvironmentEntity_.systemArch)),
52+
systemArch.toLowerCase()));
6553
}
6654
if (systemProcessors != null) {
67-
predicates.add(criteriaBuilder.equal(root.get(SYSTEM_PROCESSORS_QUERY_FIELD), systemProcessors));
55+
predicates.add(criteriaBuilder.equal(root.get(EnvironmentEntity_.systemProcessors), systemProcessors));
6856
}
6957
if (systemProcessorsMin != null) {
70-
predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get(SYSTEM_PROCESSORS_MIN_QUERY_FIELD), systemProcessorsMin));
58+
predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get(EnvironmentEntity_.systemProcessors), systemProcessorsMin));
7159
}
7260
if (systemProcessorsMax != null) {
73-
predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get(SYSTEM_PROCESSORS_MAX_QUERY_FIELD), systemProcessorsMax));
61+
predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get(EnvironmentEntity_.systemProcessors), systemProcessorsMax));
7462
}
75-
// if (systemMemory != null) {
76-
// predicates.add(criteriaBuilder.equal(root.get(SYSTEM_MEMORY_QUERY_FIELD), SystemMemory.getToByteConverter().apply(systemMemory)));
77-
// }
78-
// if (systemMemoryMin != null) {
79-
// predicates.add(criteriaBuilder.greaterThanOrEqualTo(root.get(SYSTEM_MEMORY_MIN_QUERY_FIELD),
80-
// SystemMemory.getToByteConverter().apply(systemMemoryMin)));
81-
// }
82-
// if (systemMemoryMax != null) {
83-
// predicates.add(criteriaBuilder.lessThanOrEqualTo(root.get(SYSTEM_MEMORY_MAX_QUERY_FIELD),
84-
// SystemMemory.getToByteConverter().apply(systemMemoryMax)));
85-
// }
8663
if (osFamily != null) {
87-
predicates.add(criteriaBuilder.equal(root.get(OS_FAMILY_QUERY_FIELD), osFamily));
64+
predicates.add(criteriaBuilder.equal(root.get(EnvironmentEntity_.osFamily), osFamily));
8865
}
8966
if (osName != null) {
90-
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(OS_NAME_QUERY_FIELD)), "%" + osName.toLowerCase() + "%"));
67+
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(EnvironmentEntity_.osName)), "%" +
68+
osName.toLowerCase() + "%"));
9169
}
9270
if (osVersion != null) {
93-
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(OS_VERSION_QUERY_FIELD)), "%" + osVersion.toLowerCase() + "%"));
71+
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(EnvironmentEntity_.osVersion)), "%" +
72+
osVersion.toLowerCase() + "%"));
9473
}
9574
if (jvmVersion != null) {
96-
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(JVM_VERSION_QUERY_FIELD)), "%" + jvmVersion.toLowerCase() + "%"));
75+
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(EnvironmentEntity_.jvmVersion)), "%" +
76+
jvmVersion.toLowerCase() + "%"));
9777
}
9878
if (jvmName != null) {
99-
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(JVM_NAME_QUERY_FIELD)), "%" + jvmName.toLowerCase() + "%"));
79+
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(EnvironmentEntity_.jvmName)), "%" +
80+
jvmName.toLowerCase() + "%"));
10081
}
10182
if (jmhVersion != null) {
102-
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(JMH_VERSION_QUERY_FIELD)), "%" + jmhVersion.toLowerCase() + "%"));
83+
predicates.add(criteriaBuilder.like(criteriaBuilder.lower(root.get(EnvironmentEntity_.jmhVersion)), "%" +
84+
jmhVersion.toLowerCase() + "%"));
10385
}
10486
return criteriaBuilder.and(predicates.toArray(new Predicate[0]));
10587
};

server/src/main/java/com/openelements/benchscape/server/store/repositories/MeasurementSpecification.java

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.openelements.benchscape.server.store.data.MeasurementQuery;
44
import com.openelements.benchscape.server.store.entities.MeasurementEntity;
5+
import com.openelements.benchscape.server.store.entities.MeasurementEntity_;
56
import org.springframework.data.jpa.domain.Specification;
67
import jakarta.persistence.criteria.Predicate;
78
import java.util.ArrayList;
@@ -14,20 +15,16 @@ public static Specification<MeasurementEntity> createSpecification(MeasurementQu
1415
return (root, query1, cb) -> {
1516
List<Predicate> predicates = new ArrayList<>();
1617

17-
predicates.add(cb.equal(root.get("benchmarkId"), UUID.fromString(query.benchmarkId())));
18+
predicates.add(cb.equal(root.get(MeasurementEntity_.benchmarkId), UUID.fromString(query.benchmarkId())));
1819

19-
predicates.add(cb.between(root.get("timestamp"), query.start(), query.end()));
20-
21-
if (!query.environmentIds().isEmpty()) {
22-
predicates.add(root.get("environmentId").in(query.environmentIds()));
23-
}
20+
predicates.add(cb.between(root.get(MeasurementEntity_.timestamp), query.start(), query.end()));
2421

2522
if (query.gitOriginUrl() != null) {
26-
predicates.add(cb.equal(root.get("metadata").get("gitOriginUrl"), query.gitOriginUrl()));
23+
predicates.add(cb.equal(root.get(MeasurementEntity_.metadata).get("gitOriginUrl"), query.gitOriginUrl()));
2724
}
2825

2926
if (query.gitBranch() != null) {
30-
predicates.add(cb.equal(root.get("metadata").get("gitBranch"), query.gitBranch()));
27+
predicates.add(cb.equal(root.get(MeasurementEntity_.metadata).get("gitBranch"), query.gitBranch()));
3128
}
3229

3330
return cb.and(predicates.toArray(new Predicate[0]));

0 commit comments

Comments
 (0)