Skip to content

Commit d6bf89b

Browse files
author
talhadilber
committed
same join make multi join problem fixed
1 parent cb87f49 commit d6bf89b

File tree

3 files changed

+12
-5
lines changed

3 files changed

+12
-5
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
<groupId>io.github.tdilber</groupId>
1515
<artifactId>spring-jpa-dynamic-query</artifactId>
16-
<version>0.2.1</version>
16+
<version>0.2.4</version>
1717
<packaging>jar</packaging>
1818
<name>Spring Jpa Dynamic Query</name>
1919
<description>Spring Jpa Dynamic Query Project</description>

src/main/java/com/beyt/query/DynamicSpecification.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import com.beyt.util.SpecificationUtil;
99
import org.apache.commons.lang3.tuple.ImmutableTriple;
1010
import org.apache.commons.lang3.tuple.Triple;
11+
import org.hibernate.query.criteria.internal.path.RootImpl;
1112
import org.springframework.data.jpa.domain.Specification;
1213
import org.springframework.data.util.Pair;
1314

@@ -22,10 +23,16 @@
2223
public class DynamicSpecification<Entity> implements Specification<Entity> {
2324

2425
protected List<Criteria> criteriaList;
25-
protected Map<Triple<From<?, ?>, String, JoinType>, Join<?, ?>> joinMap = new ConcurrentHashMap<>();
26+
protected Map<Triple<String, String, JoinType>, Join<?, ?>> joinMap = new ConcurrentHashMap<>();
2627

2728
public DynamicSpecification(List<Criteria> criteriaList) {
2829
this.criteriaList = criteriaList;
30+
this.joinMap = new ConcurrentHashMap<>();
31+
}
32+
33+
public DynamicSpecification(List<Criteria> criteriaList, Map<Triple<String, String, JoinType>, Join<?, ?>> joinMap) {
34+
this.criteriaList = criteriaList;
35+
this.joinMap = joinMap;
2936
}
3037

3138
@Override
@@ -36,7 +43,7 @@ public Predicate toPredicate(Root<Entity> root, CriteriaQuery<?> query, Criteria
3643
if (criteriaList.get(i).operation == CriteriaType.PARENTHES) {
3744
SpecificationUtil.checkHasFirstValue(criteriaList.get(i));
3845
try {
39-
predicateAndList.add(new DynamicSpecification<Entity>(((List<Criteria>) (criteriaList.get(i).values.get(0)))).toPredicate(root, query, builder));
46+
predicateAndList.add(new DynamicSpecification<Entity>(((List<Criteria>) (criteriaList.get(i).values.get(0))), joinMap).toPredicate(root, query, builder));
4047
} catch (Exception e) {
4148
throw new DynamicQueryNoAvailableParenthesesOperationUsageException(
4249
"There is No Available Paranthes Operation Usage in Criteria Key: " + criteriaList.get(i).key);
@@ -131,7 +138,7 @@ protected Predicate addPredicate(Path<?> root, CriteriaBuilder builder, Criteria
131138
}
132139

133140
protected Join<?, ?> getJoin(From<?, ?> from, String key, JoinType joinType) {
134-
Triple<From<?, ?>, String, JoinType> joinMapKey = new ImmutableTriple<>(from, key, joinType);
141+
Triple<String, String, JoinType> joinMapKey = new ImmutableTriple<>(((RootImpl) from).getEntityType().getJavaType().getName(), key, joinType);
135142
if (joinMap.containsKey(joinMapKey)) {
136143
return joinMap.get(joinMapKey);
137144
}

src/test/resources/config/application.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ spring:
1515
jpa:
1616
database-platform: org.hibernate.dialect.H2Dialect
1717
open-in-view: false
18-
show-sql: false
18+
show-sql: true
1919
hibernate:
2020
ddl-auto: create-drop
2121
naming:

0 commit comments

Comments
 (0)