HHH-16616 Apply discriminator by pruning table group
Also, only apply the discriminator for loads since in queries the pruning is already handled by the entity name usage logic.
This commit is contained in:
parent
3ae0a0e430
commit
0914fba014
|
@ -300,12 +300,16 @@ public class OneToManyPersister extends AbstractCollectionPersister {
|
||||||
SqlAstCreationState astCreationState) {
|
SqlAstCreationState astCreationState) {
|
||||||
super.applyWhereFragments( predicateConsumer, alias, tableGroup, astCreationState );
|
super.applyWhereFragments( predicateConsumer, alias, tableGroup, astCreationState );
|
||||||
|
|
||||||
getElementPersisterInternal().applyDiscriminator(
|
if ( !astCreationState.supportsEntityNameUsage() ) {
|
||||||
predicateConsumer,
|
// We only need to apply discriminator for loads, since queries with joined
|
||||||
alias,
|
// inheritance subtypes are already filtered by the entity name usage logic
|
||||||
tableGroup,
|
getElementPersisterInternal().applyDiscriminator(
|
||||||
astCreationState
|
predicateConsumer,
|
||||||
);
|
alias,
|
||||||
|
tableGroup,
|
||||||
|
astCreationState
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -14,6 +14,7 @@ import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.BitSet;
|
import java.util.BitSet;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.IdentityHashMap;
|
import java.util.IdentityHashMap;
|
||||||
|
@ -3013,7 +3014,7 @@ public abstract class AbstractEntityPersister
|
||||||
TableGroup tableGroup,
|
TableGroup tableGroup,
|
||||||
SqlAstCreationState creationState) {
|
SqlAstCreationState creationState) {
|
||||||
if ( needsDiscriminator() ) {
|
if ( needsDiscriminator() ) {
|
||||||
predicateConsumer.accept( createDiscriminatorPredicate( alias, tableGroup, creationState ) );
|
pruneForSubclasses( tableGroup, Collections.singletonMap( getEntityName(), EntityNameUse.TREAT ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3042,6 +3042,11 @@ public abstract class BaseSqmToSqlAstConverter<T extends Statement> extends Base
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsEntityNameUsage() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void registerEntityNameUsage(
|
public void registerEntityNameUsage(
|
||||||
TableGroup tableGroup,
|
TableGroup tableGroup,
|
||||||
|
|
|
@ -42,4 +42,9 @@ public interface SqlAstCreationState {
|
||||||
String hibernateEntityName) {
|
String hibernateEntityName) {
|
||||||
// No-op
|
// No-op
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Internal
|
||||||
|
default boolean supportsEntityNameUsage() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,7 @@ public class NamedTableReference extends AbstractTableReference {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean containsAffectedTableName(String requestedName) {
|
public boolean containsAffectedTableName(String requestedName) {
|
||||||
return isEmpty( requestedName ) || getTableExpression().equals( requestedName );
|
return isEmpty( requestedName ) || getTableExpression().contains( requestedName );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
Loading…
Reference in New Issue