|
14 | 14 | import org.hibernate.engine.spi.SessionFactoryImplementor; |
15 | 15 | import org.hibernate.hql.internal.ast.tree.ImpliedFromElement; |
16 | 16 | import org.hibernate.internal.util.StringHelper; |
| 17 | +import org.hibernate.persister.collection.AbstractCollectionPersister; |
17 | 18 | import org.hibernate.persister.collection.QueryableCollection; |
18 | 19 | import org.hibernate.persister.entity.AbstractEntityPersister; |
19 | 20 | import org.hibernate.persister.entity.Joinable; |
@@ -422,9 +423,16 @@ private boolean needsTableGroupJoin(List<Join> joins, String withClauseFragment) |
422 | 423 | } |
423 | 424 |
|
424 | 425 | private boolean isSubclassAliasDereferenced(Join join, String withClauseFragment) { |
425 | | - if ( join.getJoinable() instanceof AbstractEntityPersister ) { |
426 | | - AbstractEntityPersister persister = (AbstractEntityPersister) join.getJoinable(); |
427 | | - int subclassTableSpan = persister.getSubclassTableSpan(); |
| 426 | + Object joinable = join.getJoinable(); |
| 427 | + if ( joinable instanceof AbstractCollectionPersister ) { |
| 428 | + final AbstractCollectionPersister collectionPersister = (AbstractCollectionPersister) joinable; |
| 429 | + if ( collectionPersister.getElementType().isEntityType() ) { |
| 430 | + joinable = ( collectionPersister ).getElementPersister(); |
| 431 | + } |
| 432 | + } |
| 433 | + if ( joinable instanceof AbstractEntityPersister ) { |
| 434 | + final AbstractEntityPersister persister = (AbstractEntityPersister) joinable; |
| 435 | + final int subclassTableSpan = persister.getSubclassTableSpan(); |
428 | 436 | for ( int j = 1; j < subclassTableSpan; j++ ) { |
429 | 437 | String subclassAlias = AbstractEntityPersister.generateTableAlias( join.getAlias(), j ); |
430 | 438 | if ( isAliasDereferenced( withClauseFragment, subclassAlias ) ) { |
|
0 commit comments