When referencing a join node in an “on”-clause the lookup of the join node causes a StackOverflowError. This worked in Hibernate 5 and blocks us from migrating to Hibernate 6.
Code example:
{noformat}final Child someChildToCompareTo = new Child(); entityManager.persist(someChildToCompareTo);
final CriteriaBuilder cb = entityManager.getCriteriaBuilder(); final CriteriaQuery<Parent> cq = cb.createQuery(Parent.class); final Root<Parent> root = cq.from(Parent.class); final SetJoin<Parent, Child> childrenJoin = root.join(Parent_.children);
// This will cause a StackOverflowError: childrenJoin.on(cb.equal(childrenJoin, someChildToCompareTo));
entityManager.createQuery(cq).getResultList();{noformat}
A reproducer project is attached. I adapted the reproducer of [https://hibernate.atlassian.net/browse/HHH-16968|https://hibernate.atlassian.net/browse/HHH-16968|smart-link] to demonstrate the problem.
Example Stacktrace excerpt:
{code:none} at org.hibernate.query.sqm.SemanticQueryWalker.visitSetJoin(SemanticQueryWalker.java:211) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.domain.SqmSetJoin.accept(SqmSetJoin.java:85) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.lambda$visitComparisonPredicate$14(ParameterCollector.java:272) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.withTypeInference(ParameterCollector.java:147) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.visitComparisonPredicate(ParameterCollector.java:272) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.predicate.SqmComparisonPredicate.accept(SqmComparisonPredicate.java:104) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.spi.BaseSemanticQueryWalker.visitQualifiedAttributeJoin(BaseSemanticQueryWalker.java:296) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.SemanticQueryWalker.visitSetJoin(SemanticQueryWalker.java:211) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.domain.SqmSetJoin.accept(SqmSetJoin.java:85) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.lambda$visitComparisonPredicate$14(ParameterCollector.java:272) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.withTypeInference(ParameterCollector.java:147) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.visitComparisonPredicate(ParameterCollector.java:272) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.predicate.SqmComparisonPredicate.accept(SqmComparisonPredicate.java:104) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.spi.BaseSemanticQueryWalker.visitQualifiedAttributeJoin(BaseSemanticQueryWalker.java:296) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.SemanticQueryWalker.visitSetJoin(SemanticQueryWalker.java:211) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.domain.SqmSetJoin.accept(SqmSetJoin.java:85) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.lambda$visitComparisonPredicate$14(ParameterCollector.java:272) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.withTypeInference(ParameterCollector.java:147) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.jpa.ParameterCollector.visitComparisonPredicate(ParameterCollector.java:272) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.predicate.SqmComparisonPredicate.accept(SqmComparisonPredicate.java:104) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.spi.BaseSemanticQueryWalker.visitQualifiedAttributeJoin(BaseSemanticQueryWalker.java:296) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.SemanticQueryWalker.visitSetJoin(SemanticQueryWalker.java:211) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1] at org.hibernate.query.sqm.tree.domain.SqmSetJoin.accept(SqmSetJoin.java:85) ~[hibernate-core-6.3.0.CR1.jar:6.3.0.CR1]{code} |
|