mirror of
https://github.com/hibernate/hibernate-orm
synced 2025-02-18 09:05:21 +00:00
HHH-12076 Fix index out of bounds exception and allow table group joins for collection joins as well
This commit is contained in:
parent
7f814107a8
commit
44d78d9b85
@ -14,6 +14,7 @@
|
|||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
import org.hibernate.hql.internal.ast.tree.ImpliedFromElement;
|
import org.hibernate.hql.internal.ast.tree.ImpliedFromElement;
|
||||||
import org.hibernate.internal.util.StringHelper;
|
import org.hibernate.internal.util.StringHelper;
|
||||||
|
import org.hibernate.persister.collection.AbstractCollectionPersister;
|
||||||
import org.hibernate.persister.collection.QueryableCollection;
|
import org.hibernate.persister.collection.QueryableCollection;
|
||||||
import org.hibernate.persister.entity.AbstractEntityPersister;
|
import org.hibernate.persister.entity.AbstractEntityPersister;
|
||||||
import org.hibernate.persister.entity.Joinable;
|
import org.hibernate.persister.entity.Joinable;
|
||||||
@ -422,9 +423,16 @@ private boolean needsTableGroupJoin(List<Join> joins, String withClauseFragment)
|
|||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSubclassAliasDereferenced(Join join, String withClauseFragment) {
|
private boolean isSubclassAliasDereferenced(Join join, String withClauseFragment) {
|
||||||
if ( join.getJoinable() instanceof AbstractEntityPersister ) {
|
Object joinable = join.getJoinable();
|
||||||
AbstractEntityPersister persister = (AbstractEntityPersister) join.getJoinable();
|
if ( joinable instanceof AbstractCollectionPersister ) {
|
||||||
int subclassTableSpan = persister.getSubclassTableSpan();
|
final AbstractCollectionPersister collectionPersister = (AbstractCollectionPersister) joinable;
|
||||||
|
if ( collectionPersister.getElementType().isEntityType() ) {
|
||||||
|
joinable = ( collectionPersister ).getElementPersister();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( joinable instanceof AbstractEntityPersister ) {
|
||||||
|
final AbstractEntityPersister persister = (AbstractEntityPersister) joinable;
|
||||||
|
final int subclassTableSpan = persister.getSubclassTableSpan();
|
||||||
for ( int j = 1; j < subclassTableSpan; j++ ) {
|
for ( int j = 1; j < subclassTableSpan; j++ ) {
|
||||||
String subclassAlias = AbstractEntityPersister.generateTableAlias( join.getAlias(), j );
|
String subclassAlias = AbstractEntityPersister.generateTableAlias( join.getAlias(), j );
|
||||||
if ( isAliasDereferenced( withClauseFragment, subclassAlias ) ) {
|
if ( isAliasDereferenced( withClauseFragment, subclassAlias ) ) {
|
||||||
|
@ -557,7 +557,9 @@ public void visit(AST node) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
referencedFromElement = fromElement;
|
referencedFromElement = fromElement;
|
||||||
|
if ( fromElement != null ) {
|
||||||
joinAlias = extractAppliedAlias( dotNode );
|
joinAlias = extractAppliedAlias( dotNode );
|
||||||
|
}
|
||||||
// TODO : temporary
|
// TODO : temporary
|
||||||
// needed because currently persister is the one that
|
// needed because currently persister is the one that
|
||||||
// creates and renders the join fragments for inheritance
|
// creates and renders the join fragments for inheritance
|
||||||
|
@ -80,7 +80,6 @@ protected void prepareTest() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@FailureExpected( jiraKey = "HHH-12076")
|
|
||||||
public void testClassExpressionInOnClause() {
|
public void testClassExpressionInOnClause() {
|
||||||
doInHibernate( this::sessionFactory, session -> {
|
doInHibernate( this::sessionFactory, session -> {
|
||||||
List<SettlementTask> results = session.createQuery(
|
List<SettlementTask> results = session.createQuery(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user