Skip to content

Commit 5ad1d94

Browse files
Use view instead of join (#608)
* use view instead of join * use list instead of collection Co-authored-by: steffengreiner <[email protected]> --------- Co-authored-by: steffengreiner <[email protected]>
1 parent dd5aceb commit 5ad1d94

File tree

3 files changed

+45
-17
lines changed

3 files changed

+45
-17
lines changed

project-management-infrastructure/src/main/java/life/qbic/projectmanagement/infrastructure/project/ProjectOverviewLookupImplementation.java

+9-10
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package life.qbic.projectmanagement.infrastructure.project;
22

3-
import jakarta.persistence.criteria.Join;
43
import java.util.Collection;
54
import java.util.List;
65
import java.util.Objects;
@@ -72,11 +71,11 @@ private Specification<ProjectOverview> generateProjectOverviewSpecification(
7271
filter);
7372
Specification<ProjectOverview> hasPxpMeasurements = ProjectOverviewSpec.hasPxPMeasurements(
7473
filter);
75-
Specification<ProjectOverview> isInCollaboratorNames = ProjectOverviewSpec.isInCollaboratorNames(
76-
filter);
74+
// Specification<ProjectOverview> isInCollaboratorNames = ProjectOverviewSpec.isInCollaboratorNames(
75+
// filter);
7776
Specification<ProjectOverview> filterSpecification = Specification.anyOf(isProjectTitle,
7877
isProjectCode, isLastModifiedDate, isPrincipalInvestigator, isResponsiblePerson,
79-
hasNgsMeasurements, hasPxpMeasurements, isInCollaboratorNames);
78+
hasNgsMeasurements, hasPxpMeasurements/*, isInCollaboratorNames*/);
8079
return Specification.where(isBlankSpec)
8180
.and(containsProjectId)
8281
.and(filterSpecification)
@@ -167,12 +166,12 @@ public static Specification<ProjectOverview> hasPxPMeasurements(String filter) {
167166
};
168167
}
169168

170-
public static Specification<ProjectOverview> isInCollaboratorNames(String filter) {
171-
return (root, query, builder) -> {
172-
Join<ProjectOverview, String> memberJoin = root.join("collaboratorUserNames");
173-
return builder.like(memberJoin, "%" + filter + "%");
174-
};
175-
}
169+
// public static Specification<ProjectOverview> isInCollaboratorNames(String filter) {
170+
// return (root, query, builder) -> {
171+
// Join<ProjectOverview, String> memberJoin = root.join("collaboratorUserNames");
172+
// return builder.like(memberJoin, "%" + filter + "%");
173+
// };
174+
// }
176175

177176
}
178177

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package life.qbic.projectmanagement.application;
2+
3+
import jakarta.persistence.AttributeConverter;
4+
import jakarta.persistence.Converter;
5+
import java.util.Arrays;
6+
import java.util.List;
7+
8+
/**
9+
* Converts a string of comma separated usernames to a list of usernames.
10+
*
11+
* @since 1.0.0
12+
*/
13+
@Converter(autoApply = false)
14+
public class CollaboratorUserNamesConverter implements
15+
AttributeConverter<List<String>, String> {
16+
17+
@Override
18+
public String convertToDatabaseColumn(List<String> attribute) {
19+
return String.join(", ", attribute);
20+
}
21+
22+
@Override
23+
public List<String> convertToEntityAttribute(String dbData) {
24+
return Arrays.stream(dbData.split(","))
25+
.map(String::strip)
26+
.toList();
27+
}
28+
29+
}

project-management/src/main/java/life/qbic/projectmanagement/application/ProjectOverview.java

+7-7
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
package life.qbic.projectmanagement.application;
22

3-
import jakarta.persistence.CollectionTable;
43
import jakarta.persistence.Column;
5-
import jakarta.persistence.ElementCollection;
4+
import jakarta.persistence.Convert;
65
import jakarta.persistence.EmbeddedId;
76
import jakarta.persistence.Entity;
8-
import jakarta.persistence.FetchType;
9-
import jakarta.persistence.JoinColumn;
107
import jakarta.persistence.Table;
118
import java.time.Instant;
129
import java.util.ArrayList;
1310
import java.util.Collection;
11+
import java.util.List;
1412
import life.qbic.projectmanagement.domain.model.project.Project;
1513
import life.qbic.projectmanagement.domain.model.project.ProjectId;
1614
import org.hibernate.annotations.Immutable;
@@ -54,9 +52,11 @@ public class ProjectOverview {
5452
@Column(name = "amountPxpMeasurements")
5553
private String pxpMeasurementCount;
5654

57-
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
58-
@CollectionTable(name = "project_usernames", joinColumns = @JoinColumn(name = "projectId"))
59-
private Collection<String> collaboratorUserNames = new ArrayList<>();
55+
@Convert(converter = CollaboratorUserNamesConverter.class)
56+
// @ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
57+
// @CollectionTable(name = "project_usernames", joinColumns = @JoinColumn(name = "projectId"))
58+
@Column(name = "usernames")
59+
private List<String> collaboratorUserNames = new ArrayList<>();
6060

6161
protected ProjectOverview() {
6262

0 commit comments

Comments
 (0)