refactor a bit the BindingContext hierarchy
This commit is contained in:
parent
1abc64fc65
commit
b4e26b3e32
|
@ -40,7 +40,7 @@ import org.hibernate.engine.profile.FetchProfile;
|
|||
import org.hibernate.event.spi.EventEngine;
|
||||
import org.hibernate.graph.spi.RootGraphImplementor;
|
||||
import org.hibernate.internal.FastSessionServices;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.spi.MetamodelImplementor;
|
||||
import org.hibernate.metamodel.spi.RuntimeMetamodelsImplementor;
|
||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||
|
@ -265,7 +265,7 @@ public class SessionFactoryDelegatingImpl implements SessionFactoryImplementor,
|
|||
}
|
||||
|
||||
@Override
|
||||
public JpaMetamodelImplementor getJpaMetamodel() {
|
||||
public JpaMetamodel getJpaMetamodel() {
|
||||
return delegate.getJpaMetamodel();
|
||||
}
|
||||
|
||||
|
|
|
@ -25,7 +25,6 @@ import org.hibernate.metamodel.spi.MappingMetamodelImplementor;
|
|||
import org.hibernate.metamodel.spi.MetamodelImplementor;
|
||||
import org.hibernate.metamodel.spi.RuntimeMetamodelsImplementor;
|
||||
import org.hibernate.proxy.EntityNotFoundDelegate;
|
||||
import org.hibernate.query.spi.QueryEngine;
|
||||
import org.hibernate.query.spi.QueryParameterBindingTypeResolver;
|
||||
import org.hibernate.query.sqm.spi.SqmCreationContext;
|
||||
import org.hibernate.service.spi.ServiceRegistryImplementor;
|
||||
|
@ -91,9 +90,6 @@ public interface SessionFactoryImplementor
|
|||
return getRuntimeMetamodels().getMappingMetamodel();
|
||||
}
|
||||
|
||||
@Override
|
||||
QueryEngine getQueryEngine();
|
||||
|
||||
@Override
|
||||
SessionBuilderImplementor withOptions();
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ package org.hibernate.graph.internal.parse;
|
|||
|
||||
import org.hibernate.graph.CannotContainSubGraphException;
|
||||
import org.hibernate.metamodel.model.domain.DomainType;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.ManagedDomainType;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
|
||||
|
@ -42,13 +43,11 @@ public enum PathQualifierType {
|
|||
private static ManagedDomainType resolveSubTypeManagedType(
|
||||
DomainType<?> graphType,
|
||||
String subTypeName,
|
||||
JpaMetamodelImplementor metamodel) {
|
||||
if ( !( graphType instanceof ManagedDomainType ) ) {
|
||||
JpaMetamodel metamodel) {
|
||||
if ( !( graphType instanceof ManagedDomainType<?> managedType ) ) {
|
||||
throw new CannotContainSubGraphException( "The given type [" + graphType + "] is not a ManagedType" );
|
||||
}
|
||||
|
||||
ManagedDomainType managedType = (ManagedDomainType) graphType;
|
||||
|
||||
if ( subTypeName != null ) {
|
||||
managedType = resolveSubType( managedType, subTypeName, metamodel );
|
||||
}
|
||||
|
|
|
@ -14,9 +14,9 @@ import org.hibernate.metamodel.internal.MetadataContext;
|
|||
import org.hibernate.metamodel.mapping.CollectionPart;
|
||||
import org.hibernate.metamodel.model.domain.DomainType;
|
||||
import org.hibernate.metamodel.model.domain.EntityDomainType;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.PluralPersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.SimpleDomainType;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.spi.NavigablePath;
|
||||
import org.hibernate.query.sqm.SqmPathSource;
|
||||
import org.hibernate.query.sqm.internal.SqmMappingModelHelper;
|
||||
|
@ -89,7 +89,7 @@ public abstract class AbstractPluralAttribute<D, C, E>
|
|||
}
|
||||
|
||||
@Override
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
if ( CollectionPart.Nature.ELEMENT.getName().equals( name ) ) {
|
||||
return elementPathSource;
|
||||
}
|
||||
|
|
|
@ -59,11 +59,13 @@ public class DomainModelHelper {
|
|||
static boolean isCompatible(
|
||||
PersistentAttribute<?, ?> attribute1,
|
||||
PersistentAttribute<?, ?> attribute2,
|
||||
JpaMetamodelImplementor jpaMetamodel) {
|
||||
JpaMetamodel jpaMetamodel) {
|
||||
if ( attribute1 == attribute2 ) {
|
||||
return true;
|
||||
}
|
||||
final MappingMetamodel runtimeMetamodels = jpaMetamodel.getMappingMetamodel();
|
||||
final MappingMetamodel runtimeMetamodels =
|
||||
//TODO: eliminate this cast!
|
||||
((JpaMetamodelImplementor) jpaMetamodel).getMappingMetamodel();
|
||||
final ModelPart modelPart1 = getEntityAttributeModelPart(
|
||||
attribute1,
|
||||
attribute1.getDeclaringType(),
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
package org.hibernate.metamodel.model.domain.internal;
|
||||
|
||||
import org.hibernate.metamodel.model.domain.EntityDomainType;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.query.hql.spi.SqmCreationState;
|
||||
import org.hibernate.query.sqm.SqmJoinable;
|
||||
import org.hibernate.query.sqm.SqmPathSource;
|
||||
|
@ -44,7 +44,7 @@ public class EntitySqmPathSource<J> extends AbstractSqmPathSource<J> implements
|
|||
}
|
||||
|
||||
@Override
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
return getSqmPathType().findSubPathSource( name, metamodel );
|
||||
}
|
||||
|
||||
|
|
|
@ -160,7 +160,7 @@ public class EntityTypeImpl<J>
|
|||
}
|
||||
|
||||
@Override
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
final PersistentAttribute<? super J,?> attribute = super.findAttribute( name );
|
||||
if ( attribute != null ) {
|
||||
return (SqmPathSource<?>) attribute;
|
||||
|
@ -182,7 +182,7 @@ public class EntityTypeImpl<J>
|
|||
return null;
|
||||
}
|
||||
|
||||
private PersistentAttribute<?, ?> findSubtypeAttribute(String name, JpaMetamodelImplementor metamodel) {
|
||||
private PersistentAttribute<?, ?> findSubtypeAttribute(String name, JpaMetamodel metamodel) {
|
||||
PersistentAttribute<?,?> subtypeAttribute = null;
|
||||
for ( ManagedDomainType<?> subtype : getSubTypes() ) {
|
||||
final PersistentAttribute<?,?> candidate = subtype.findSubTypesAttribute( name );
|
||||
|
|
|
@ -10,8 +10,8 @@ import java.util.List;
|
|||
|
||||
import org.hibernate.metamodel.internal.MetadataContext;
|
||||
import org.hibernate.metamodel.mapping.CollectionPart;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.ListPersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.query.sqm.SqmPathSource;
|
||||
import org.hibernate.query.hql.spi.SqmCreationState;
|
||||
import org.hibernate.query.sqm.internal.SqmMappingModelHelper;
|
||||
|
@ -62,7 +62,7 @@ public class ListAttributeImpl<X, E> extends AbstractPluralAttribute<X, List<E>,
|
|||
}
|
||||
|
||||
@Override
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
final CollectionPart.Nature nature = CollectionPart.Nature.fromNameExact( name );
|
||||
if ( nature != null ) {
|
||||
switch ( nature ) {
|
||||
|
|
|
@ -10,9 +10,9 @@ import java.util.Map;
|
|||
|
||||
import org.hibernate.metamodel.internal.MetadataContext;
|
||||
import org.hibernate.metamodel.mapping.CollectionPart;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.MapPersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.SimpleDomainType;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.query.sqm.SqmPathSource;
|
||||
import org.hibernate.query.hql.spi.SqmCreationState;
|
||||
import org.hibernate.query.sqm.internal.SqmMappingModelHelper;
|
||||
|
@ -72,7 +72,7 @@ public class MapAttributeImpl<X, K, V> extends AbstractPluralAttribute<X, Map<K,
|
|||
}
|
||||
|
||||
@Override
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
final CollectionPart.Nature nature = CollectionPart.Nature.fromNameExact( name );
|
||||
if ( nature != null ) {
|
||||
switch ( nature ) {
|
||||
|
|
|
@ -16,11 +16,11 @@ import org.hibernate.metamodel.model.domain.AnyMappingDomainType;
|
|||
import org.hibernate.metamodel.model.domain.DomainType;
|
||||
import org.hibernate.metamodel.model.domain.EntityDomainType;
|
||||
import org.hibernate.metamodel.model.domain.IdentifiableDomainType;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.ManagedDomainType;
|
||||
import org.hibernate.metamodel.model.domain.PluralPersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.SimpleDomainType;
|
||||
import org.hibernate.metamodel.model.domain.SingularPersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.query.SemanticException;
|
||||
import org.hibernate.query.sqm.SqmPathSource;
|
||||
import org.hibernate.query.hql.spi.SqmCreationState;
|
||||
|
@ -130,7 +130,7 @@ public class SingularAttributeImpl<D,J>
|
|||
}
|
||||
|
||||
@Override
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
return sqmPathSource.findSubPathSource( name, metamodel );
|
||||
}
|
||||
|
||||
|
|
|
@ -21,7 +21,11 @@ import org.hibernate.type.spi.TypeConfiguration;
|
|||
*/
|
||||
@Incubating
|
||||
public interface BindingContext {
|
||||
TypeConfiguration getTypeConfiguration();
|
||||
JpaMetamodel getJpaMetamodel();
|
||||
|
||||
MappingMetamodel getMappingMetamodel();
|
||||
|
||||
default TypeConfiguration getTypeConfiguration() {
|
||||
return getJpaMetamodel().getTypeConfiguration();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -8,8 +8,8 @@ package org.hibernate.query.hql.internal;
|
|||
|
||||
import org.hibernate.metamodel.model.domain.EmbeddableDomainType;
|
||||
import org.hibernate.metamodel.model.domain.EntityDomainType;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.ManagedDomainType;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.query.SemanticException;
|
||||
import org.hibernate.query.hql.HqlLogging;
|
||||
import org.hibernate.query.hql.spi.DotIdentifierConsumer;
|
||||
|
@ -183,7 +183,7 @@ public class BasicDotIdentifierConsumer implements DotIdentifierConsumer {
|
|||
}
|
||||
|
||||
final String path = pathSoFar.toString();
|
||||
final JpaMetamodelImplementor jpaMetamodel = creationContext.getJpaMetamodel();
|
||||
final JpaMetamodel jpaMetamodel = creationContext.getJpaMetamodel();
|
||||
final String importableName = jpaMetamodel.qualifyImportableName( path );
|
||||
final NodeBuilder nodeBuilder = creationContext.getNodeBuilder();
|
||||
if ( importableName != null ) {
|
||||
|
@ -232,7 +232,7 @@ public class BasicDotIdentifierConsumer implements DotIdentifierConsumer {
|
|||
}
|
||||
|
||||
private static <E> SqmFieldLiteral<E> sqmFieldLiteral(
|
||||
JpaMetamodelImplementor jpaMetamodel,
|
||||
JpaMetamodel jpaMetamodel,
|
||||
String prefix,
|
||||
String terminal,
|
||||
JavaType<E> fieldJtdTest,
|
||||
|
@ -246,7 +246,7 @@ public class BasicDotIdentifierConsumer implements DotIdentifierConsumer {
|
|||
}
|
||||
|
||||
private static <E extends Enum<E>> SqmEnumLiteral<E> sqmEnumLiteral(
|
||||
JpaMetamodelImplementor jpaMetamodel,
|
||||
JpaMetamodel jpaMetamodel,
|
||||
EnumJavaType<E> enumType,
|
||||
String terminal,
|
||||
NodeBuilder nodeBuilder) {
|
||||
|
|
|
@ -48,13 +48,13 @@ import org.hibernate.metamodel.model.domain.BasicDomainType;
|
|||
import org.hibernate.metamodel.model.domain.DomainType;
|
||||
import org.hibernate.metamodel.model.domain.EntityDomainType;
|
||||
import org.hibernate.metamodel.model.domain.IdentifiableDomainType;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.ManagedDomainType;
|
||||
import org.hibernate.metamodel.model.domain.PersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.PluralPersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.SingularPersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.internal.AnyDiscriminatorSqmPath;
|
||||
import org.hibernate.metamodel.model.domain.internal.EntitySqmPathSource;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.query.NullPrecedence;
|
||||
import org.hibernate.query.ParameterLabelException;
|
||||
import org.hibernate.query.PathException;
|
||||
|
@ -1287,7 +1287,7 @@ public class SemanticQueryBuilder<R> extends HqlParserBaseVisitor<Object> implem
|
|||
}
|
||||
|
||||
private EntityDomainType<R> getResultEntity() {
|
||||
final JpaMetamodelImplementor jpaMetamodel = creationContext.getJpaMetamodel();
|
||||
final JpaMetamodel jpaMetamodel = creationContext.getJpaMetamodel();
|
||||
if ( expectedResultEntity != null ) {
|
||||
@SuppressWarnings("rawtypes")
|
||||
final EntityDomainType entityDescriptor = jpaMetamodel.entity( expectedResultEntity );
|
||||
|
|
|
@ -15,7 +15,7 @@ import java.util.function.Function;
|
|||
|
||||
import org.hibernate.jpa.spi.JpaCompliance;
|
||||
import org.hibernate.metamodel.model.domain.BasicDomainType;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.query.criteria.JpaCrossJoin;
|
||||
import org.hibernate.query.SemanticException;
|
||||
import org.hibernate.query.hql.HqlLogging;
|
||||
|
@ -331,7 +331,7 @@ public class SqmPathRegistryImpl implements SqmPathRegistry {
|
|||
&& containerType.findSubPathSource( name, getJpaMetamodel() ) != null;
|
||||
}
|
||||
|
||||
private JpaMetamodelImplementor getJpaMetamodel() {
|
||||
private JpaMetamodel getJpaMetamodel() {
|
||||
return associatedProcessingState.getCreationState().getCreationContext().getJpaMetamodel();
|
||||
}
|
||||
|
||||
|
|
|
@ -11,7 +11,7 @@ import java.util.Locale;
|
|||
import jakarta.persistence.metamodel.Bindable;
|
||||
|
||||
import org.hibernate.metamodel.model.domain.DomainType;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.spi.NavigablePath;
|
||||
import org.hibernate.query.sqm.tree.SqmExpressibleAccessor;
|
||||
import org.hibernate.query.sqm.tree.domain.SqmPath;
|
||||
|
@ -57,7 +57,7 @@ public interface SqmPathSource<J> extends SqmExpressible<J>, Bindable<J>, SqmExp
|
|||
*
|
||||
* @throws IllegalStateException to indicate that this source cannot be de-referenced
|
||||
*/
|
||||
default SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
default SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
return findSubPathSource( name );
|
||||
}
|
||||
|
||||
|
@ -88,7 +88,7 @@ public interface SqmPathSource<J> extends SqmExpressible<J>, Bindable<J>, SqmExp
|
|||
* @throws IllegalStateException to indicate that this source cannot be de-referenced
|
||||
* @throws IllegalArgumentException if the subPathSource is not found
|
||||
*/
|
||||
default SqmPathSource<?> getSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
default SqmPathSource<?> getSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
final SqmPathSource<?> subPathSource = findSubPathSource( name, metamodel );
|
||||
if ( subPathSource == null ) {
|
||||
throw new PathElementException(
|
||||
|
|
|
@ -7,39 +7,25 @@
|
|||
package org.hibernate.query.sqm.spi;
|
||||
|
||||
import org.hibernate.Incubating;
|
||||
import org.hibernate.metamodel.model.domain.spi.JpaMetamodelImplementor;
|
||||
import org.hibernate.query.BindingContext;
|
||||
import org.hibernate.query.spi.QueryEngine;
|
||||
import org.hibernate.query.sqm.NodeBuilder;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
import org.hibernate.type.spi.TypeConfiguration;
|
||||
|
||||
/**
|
||||
* The context in which all SQM creations occur (think SessionFactory).
|
||||
* The context in which all SQM creations occur.
|
||||
*
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
@Incubating
|
||||
public interface SqmCreationContext extends BindingContext {
|
||||
/**
|
||||
* Access to the domain model metadata
|
||||
*/
|
||||
JpaMetamodelImplementor getJpaMetamodel();
|
||||
|
||||
/**
|
||||
* Access to the ServiceRegistry for the context
|
||||
*/
|
||||
default ServiceRegistry getServiceRegistry() {
|
||||
return getJpaMetamodel().getServiceRegistry();
|
||||
}
|
||||
|
||||
default TypeConfiguration getTypeConfiguration() {
|
||||
return getJpaMetamodel().getTypeConfiguration();
|
||||
}
|
||||
|
||||
QueryEngine getQueryEngine();
|
||||
|
||||
default NodeBuilder getNodeBuilder() {
|
||||
return getQueryEngine().getCriteriaBuilder();
|
||||
}
|
||||
|
||||
default ServiceRegistry getServiceRegistry() {
|
||||
return getJpaMetamodel().getServiceRegistry();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -58,6 +58,7 @@ import org.hibernate.metamodel.internal.RuntimeMetamodelsImpl;
|
|||
import org.hibernate.metamodel.mapping.JdbcMapping;
|
||||
import org.hibernate.metamodel.model.domain.DomainType;
|
||||
import org.hibernate.metamodel.model.domain.EntityDomainType;
|
||||
import org.hibernate.metamodel.model.domain.JpaMetamodel;
|
||||
import org.hibernate.metamodel.model.domain.ManagedDomainType;
|
||||
import org.hibernate.metamodel.model.domain.PersistentAttribute;
|
||||
import org.hibernate.metamodel.model.domain.internal.AbstractAttribute;
|
||||
|
@ -908,7 +909,7 @@ public abstract class MockSessionFactory
|
|||
}
|
||||
|
||||
@Override
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodelImplementor metamodel) {
|
||||
public SqmPathSource<?> findSubPathSource(String name, JpaMetamodel metamodel) {
|
||||
SqmPathSource<?> source = super.findSubPathSource(name, metamodel);
|
||||
if ( source != null ) {
|
||||
return source;
|
||||
|
|
Loading…
Reference in New Issue