HHH-17615 Small fix to entity joins with soft-delete and inheritance
This commit is contained in:
parent
b99b6e4146
commit
c7658e1cab
|
@ -12,7 +12,6 @@ import jakarta.persistence.metamodel.Type;
|
||||||
import org.hibernate.HibernateException;
|
import org.hibernate.HibernateException;
|
||||||
import org.hibernate.Internal;
|
import org.hibernate.Internal;
|
||||||
import org.hibernate.LockMode;
|
import org.hibernate.LockMode;
|
||||||
import org.hibernate.boot.model.internal.SoftDeleteHelper;
|
|
||||||
import org.hibernate.boot.model.process.internal.InferredBasicValueResolver;
|
import org.hibernate.boot.model.process.internal.InferredBasicValueResolver;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.dialect.DmlTargetColumnQualifierSupport;
|
import org.hibernate.dialect.DmlTargetColumnQualifierSupport;
|
||||||
|
@ -31,7 +30,6 @@ import org.hibernate.id.CompositeNestedGeneratedValueGenerator;
|
||||||
import org.hibernate.id.OptimizableGenerator;
|
import org.hibernate.id.OptimizableGenerator;
|
||||||
import org.hibernate.id.enhanced.Optimizer;
|
import org.hibernate.id.enhanced.Optimizer;
|
||||||
import org.hibernate.internal.FilterHelper;
|
import org.hibernate.internal.FilterHelper;
|
||||||
import org.hibernate.internal.util.MutableBoolean;
|
|
||||||
import org.hibernate.internal.util.collections.CollectionHelper;
|
import org.hibernate.internal.util.collections.CollectionHelper;
|
||||||
import org.hibernate.internal.util.collections.Stack;
|
import org.hibernate.internal.util.collections.Stack;
|
||||||
import org.hibernate.internal.util.collections.StandardStack;
|
import org.hibernate.internal.util.collections.StandardStack;
|
||||||
|
@ -422,6 +420,7 @@ import java.util.function.Function;
|
||||||
import java.util.function.Supplier;
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import static java.util.Collections.singletonList;
|
import static java.util.Collections.singletonList;
|
||||||
|
import static org.hibernate.boot.model.internal.SoftDeleteHelper.createNonSoftDeletedRestriction;
|
||||||
import static org.hibernate.generator.EventType.INSERT;
|
import static org.hibernate.generator.EventType.INSERT;
|
||||||
import static org.hibernate.internal.util.NullnessHelper.coalesceSuppliedValues;
|
import static org.hibernate.internal.util.NullnessHelper.coalesceSuppliedValues;
|
||||||
import static org.hibernate.query.sqm.BinaryArithmeticOperator.ADD;
|
import static org.hibernate.query.sqm.BinaryArithmeticOperator.ADD;
|
||||||
|
@ -3441,7 +3440,6 @@ public abstract class BaseSqmToSqlAstConverter<T extends Statement> extends Base
|
||||||
}
|
}
|
||||||
|
|
||||||
private TableGroup consumeEntityJoin(SqmEntityJoin<?> sqmJoin, TableGroup lhsTableGroup, boolean transitive) {
|
private TableGroup consumeEntityJoin(SqmEntityJoin<?> sqmJoin, TableGroup lhsTableGroup, boolean transitive) {
|
||||||
final MutableBoolean needsTreat = new MutableBoolean( false );
|
|
||||||
final EntityPersister entityDescriptor = resolveEntityPersister( sqmJoin.getReferencedPathSource() );
|
final EntityPersister entityDescriptor = resolveEntityPersister( sqmJoin.getReferencedPathSource() );
|
||||||
|
|
||||||
final SqlAstJoinType correspondingSqlJoinType = sqmJoin.getSqmJoinType().getCorrespondingSqlJoinType();
|
final SqlAstJoinType correspondingSqlJoinType = sqmJoin.getSqmJoinType().getCorrespondingSqlJoinType();
|
||||||
|
@ -3450,12 +3448,12 @@ public abstract class BaseSqmToSqlAstConverter<T extends Statement> extends Base
|
||||||
sqmJoin.getNavigablePath(),
|
sqmJoin.getNavigablePath(),
|
||||||
sqmJoin.getExplicitAlias(),
|
sqmJoin.getExplicitAlias(),
|
||||||
null,
|
null,
|
||||||
() -> p -> needsTreat.setValue( true ),
|
() -> p -> {},
|
||||||
this
|
this
|
||||||
);
|
);
|
||||||
registerSqmFromTableGroup( sqmJoin, tableGroup );
|
registerSqmFromTableGroup( sqmJoin, tableGroup );
|
||||||
|
|
||||||
if ( needsTreat.getValue() ) {
|
if ( entityDescriptor.isInherited() && !sqmJoin.hasTreats() ) {
|
||||||
// Register new treat to apply the discriminator condition to the table reference itself, see #pruneTableGroupJoins
|
// Register new treat to apply the discriminator condition to the table reference itself, see #pruneTableGroupJoins
|
||||||
registerEntityNameUsage( tableGroup, EntityNameUse.TREAT, entityDescriptor.getEntityName() );
|
registerEntityNameUsage( tableGroup, EntityNameUse.TREAT, entityDescriptor.getEntityName() );
|
||||||
}
|
}
|
||||||
|
@ -3479,8 +3477,8 @@ public abstract class BaseSqmToSqlAstConverter<T extends Statement> extends Base
|
||||||
|
|
||||||
final SoftDeleteMapping softDeleteMapping = entityDescriptor.getSoftDeleteMapping();
|
final SoftDeleteMapping softDeleteMapping = entityDescriptor.getSoftDeleteMapping();
|
||||||
if ( softDeleteMapping != null ) {
|
if ( softDeleteMapping != null ) {
|
||||||
final Predicate softDeleteRestriction = SoftDeleteHelper.createNonSoftDeletedRestriction(
|
final Predicate softDeleteRestriction = createNonSoftDeletedRestriction(
|
||||||
tableGroup.resolveTableReference( entityDescriptor.getSoftDeleteTableDetails().getTableName() ),
|
tableGroup.resolveTableReference( softDeleteMapping.getTableName() ),
|
||||||
softDeleteMapping
|
softDeleteMapping
|
||||||
);
|
);
|
||||||
tableGroupJoin.applyPredicate( softDeleteRestriction );
|
tableGroupJoin.applyPredicate( softDeleteRestriction );
|
||||||
|
|
Loading…
Reference in New Issue