Skip to content

Commit 27e7c21

Browse files
committed
DATAJPA-1822 - skip optional detection with EclipseLink
1 parent fd6412b commit 27e7c21

File tree

3 files changed

+23
-0
lines changed

3 files changed

+23
-0
lines changed

src/main/java/org/springframework/data/jpa/repository/query/QueryUtils.java

+3
Original file line numberDiff line numberDiff line change
@@ -696,6 +696,9 @@ private static boolean requiresOuterJoin(From<?, ?> from, PropertyPath property,
696696
*/
697697
propertyPathModel = (Bindable<?>) ((ManagedType<?>) model).getAttribute(segment);
698698
} else {
699+
// with EclipseLink, model is not always an instance of ManagedType and the following can produce an inner join,
700+
// thus making the whole method useless
701+
// TODO: find a way to drop that in favor of the above
699702
propertyPathModel = from.get(segment).getModel();
700703
}
701704

src/test/java/org/springframework/data/jpa/repository/query/EclipseLinkQueryUtilsIntegrationTests.java

+4
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,8 @@ int getNumberOfJoinsAfterCreatingAPath() {
2727
return 1;
2828
}
2929

30+
boolean isSkipOptionalDetection() {
31+
return true;
32+
}
33+
3034
}

src/test/java/org/springframework/data/jpa/repository/query/QueryUtilsIntegrationTests.java

+16
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,9 @@ void createsJoinForOptionalOneToOneInReverseDirection() {
118118
@Test // DATAJPA-1822
119119
void createsLeftJoinForOptionalToOneWithNestedNonOptional() {
120120

121+
if(isSkipOptionalDetection())
122+
return;
123+
121124
CriteriaBuilder builder = em.getCriteriaBuilder();
122125
CriteriaQuery<Invoice> query = builder.createQuery(Invoice.class);
123126
Root<Invoice> root = query.from(Invoice.class);
@@ -134,6 +137,9 @@ void createsLeftJoinForOptionalToOneWithNestedNonOptional() {
134137
@Test // DATAJPA-1822
135138
void createsLeftJoinForNonOptionalToOneWithNestedOptional() {
136139

140+
if(isSkipOptionalDetection())
141+
return;
142+
137143
CriteriaBuilder builder = em.getCriteriaBuilder();
138144
CriteriaQuery<InvoiceItem> query = builder.createQuery(InvoiceItem.class);
139145
Root<InvoiceItem> root = query.from(InvoiceItem.class);
@@ -153,6 +159,9 @@ void createsLeftJoinForNonOptionalToOneWithNestedOptional() {
153159
@Test // DATAJPA-1822
154160
void reusesLeftJoinForNonOptionalToOneWithNestedOptional() {
155161

162+
if(isSkipOptionalDetection())
163+
return;
164+
156165
CriteriaBuilder builder = em.getCriteriaBuilder();
157166
CriteriaQuery<InvoiceItem> query = builder.createQuery(InvoiceItem.class);
158167
Root<InvoiceItem> root = query.from(InvoiceItem.class);
@@ -177,6 +186,9 @@ void reusesLeftJoinForNonOptionalToOneWithNestedOptional() {
177186
@Test // DATAJPA-1822
178187
void reusesInnerJoinForNonOptionalToOneWithNestedOptional() {
179188

189+
if(isSkipOptionalDetection())
190+
return;
191+
180192
CriteriaBuilder builder = em.getCriteriaBuilder();
181193
CriteriaQuery<InvoiceItem> query = builder.createQuery(InvoiceItem.class);
182194
Root<InvoiceItem> root = query.from(InvoiceItem.class);
@@ -332,6 +344,10 @@ int getNumberOfJoinsAfterCreatingAPath() {
332344
return 0;
333345
}
334346

347+
boolean isSkipOptionalDetection() {
348+
return false;
349+
}
350+
335351
private Set<Join<?, ?>> getNonInnerJoins(Root<?> root) {
336352

337353
return getNonInnerJoins((From<?, ?>) root);

0 commit comments

Comments
 (0)