From 2200a221a73e12d93cea804263418feb8e8aae3f Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Wed, 6 Oct 2021 14:18:51 +0200 Subject: [PATCH] Remove ModelPart NotYetImplementedFor6Exception --- .../mapping/EntityAssociationMapping.java | 2 +- .../metamodel/mapping/ModelPart.java | 13 ++++------ .../internal/AnyDiscriminatorPart.java | 16 +++++++++++++ .../mapping/internal/AnyKeyPart.java | 18 ++++++++++++++ .../CollectionIdentifierDescriptorImpl.java | 24 +++++++++++++++++++ .../internal/DiscriminatedCollectionPart.java | 19 +++++++++++++++ .../EmbeddedForeignKeyDescriptor.java | 19 +++++++++++++++ .../internal/SimpleForeignKeyDescriptor.java | 18 ++++++++++++++ .../metamodel/relational/Column.java | 20 ---------------- .../collection/CollectionPersister.java | 10 ++------ .../collection/QueryableCollection.java | 1 + .../CircularBiDirectionalFetchImpl.java | 20 ++++++++++++++++ .../internal/domain/CircularFetchImpl.java | 20 ++++++++++++++++ .../GoofyPersisterClassProvider.java | 6 +++++ 14 files changed, 168 insertions(+), 38 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityAssociationMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityAssociationMapping.java index 6d63dc2893..db0b249a42 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityAssociationMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityAssociationMapping.java @@ -39,7 +39,7 @@ public interface EntityAssociationMapping extends ModelPart, Association, TableG /** * Create a delayed DomainResult for a specific reference to this ModelPart. */ - DomainResult createDelayedDomainResult( + DomainResult createDelayedDomainResult( NavigablePath navigablePath, TableGroup tableGroup, String resultVariable, diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ModelPart.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ModelPart.java index d7321cc0ab..41fa5dc4e8 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ModelPart.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ModelPart.java @@ -9,7 +9,6 @@ package org.hibernate.metamodel.mapping; import java.util.Objects; import java.util.function.BiConsumer; -import org.hibernate.NotYetImplementedFor6Exception; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.metamodel.model.domain.NavigableRole; import org.hibernate.query.NavigablePath; @@ -76,23 +75,19 @@ public interface ModelPart extends MappingModelExpressable { /** * Apply SQL selections for a specific reference to this ModelPart outside the domain query's root select clause. */ - default void applySqlSelections( + void applySqlSelections( NavigablePath navigablePath, TableGroup tableGroup, - DomainResultCreationState creationState) { - throw new NotYetImplementedFor6Exception( getClass() ); - } + DomainResultCreationState creationState); /** * Apply SQL selections for a specific reference to this ModelPart outside the domain query's root select clause. */ - default void applySqlSelections( + void applySqlSelections( NavigablePath navigablePath, TableGroup tableGroup, DomainResultCreationState creationState, - BiConsumer selectionConsumer) { - throw new NotYetImplementedFor6Exception( getClass() ); - } + BiConsumer selectionConsumer); default int forEachSelectable(SelectableConsumer consumer) { return forEachSelectable( 0, consumer ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyDiscriminatorPart.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyDiscriminatorPart.java index e3f0f7125e..134cad680a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyDiscriminatorPart.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyDiscriminatorPart.java @@ -7,6 +7,7 @@ package org.hibernate.metamodel.mapping.internal; import java.io.Serializable; +import java.util.function.BiConsumer; import org.hibernate.NotYetImplementedFor6Exception; import org.hibernate.engine.FetchStyle; @@ -138,6 +139,21 @@ public class AnyDiscriminatorPart implements BasicValuedModelPart, FetchOptions, throw new NotYetImplementedFor6Exception( getClass() ); } + @Override + public void applySqlSelections( + NavigablePath navigablePath, TableGroup tableGroup, DomainResultCreationState creationState) { + throw new NotYetImplementedFor6Exception( getClass() ); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + throw new NotYetImplementedFor6Exception( getClass() ); + } + @Override public Object disassemble(Object value, SharedSessionContractImplementor session) { final Serializable discriminator = metaType.disassemble( value, session, value ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyKeyPart.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyKeyPart.java index 7c9ae6fb42..80350c6fcb 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyKeyPart.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/AnyKeyPart.java @@ -8,6 +8,7 @@ package org.hibernate.metamodel.mapping.internal; import java.util.Collections; import java.util.List; +import java.util.function.BiConsumer; import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; @@ -250,4 +251,21 @@ public class AnyKeyPart implements BasicValuedModelPart, FetchOptions { DomainResultCreationState creationState) { return anyPart.createDomainResult( navigablePath, tableGroup, resultVariable, creationState ); } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState) { + anyPart.applySqlSelections( navigablePath, tableGroup, creationState ); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + anyPart.applySqlSelections( navigablePath, tableGroup, creationState, selectionConsumer ); + } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CollectionIdentifierDescriptorImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CollectionIdentifierDescriptorImpl.java index fff64f9b4c..7c53e11f93 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CollectionIdentifierDescriptorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CollectionIdentifierDescriptorImpl.java @@ -6,6 +6,8 @@ */ package org.hibernate.metamodel.mapping.internal; +import java.util.function.BiConsumer; + import org.hibernate.engine.FetchStyle; import org.hibernate.engine.FetchTiming; import org.hibernate.engine.spi.SessionFactoryImplementor; @@ -127,6 +129,28 @@ public class CollectionIdentifierDescriptorImpl implements CollectionIdentifierD ); } + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState) { + collectionDescriptor.getAttributeMapping().applySqlSelections( navigablePath, tableGroup, creationState ); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + collectionDescriptor.getAttributeMapping().applySqlSelections( + navigablePath, + tableGroup, + creationState, + selectionConsumer + ); + } + @Override public void breakDownJdbcValues(Object domainValue, JdbcValueConsumer valueConsumer, SharedSessionContractImplementor session) { valueConsumer.consume( domainValue, this ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedCollectionPart.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedCollectionPart.java index 534b214a69..e0f2766a8d 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedCollectionPart.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/DiscriminatedCollectionPart.java @@ -6,6 +6,7 @@ */ package org.hibernate.metamodel.mapping.internal; +import java.util.function.BiConsumer; import java.util.function.Consumer; import org.hibernate.engine.FetchTiming; @@ -29,6 +30,7 @@ import org.hibernate.sql.ast.spi.SqlAstCreationContext; import org.hibernate.sql.ast.spi.SqlExpressionResolver; import org.hibernate.sql.ast.tree.from.StandardVirtualTableGroup; import org.hibernate.sql.ast.Clause; +import org.hibernate.sql.ast.spi.SqlSelection; import org.hibernate.sql.ast.tree.from.TableGroup; import org.hibernate.sql.ast.tree.from.TableGroupJoin; import org.hibernate.sql.ast.tree.predicate.Predicate; @@ -143,6 +145,23 @@ public class DiscriminatedCollectionPart implements DiscriminatedAssociationMode ); } + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState) { + discriminatorMapping.getDiscriminatorPart().applySqlSelections( navigablePath, tableGroup, creationState ); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + discriminatorMapping.getDiscriminatorPart().applySqlSelections( navigablePath, tableGroup, creationState, selectionConsumer ); + } + @Override public MappingType getPartMappingType() { return discriminatorMapping; diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedForeignKeyDescriptor.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedForeignKeyDescriptor.java index 7485c425a8..d1cf51fc96 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedForeignKeyDescriptor.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedForeignKeyDescriptor.java @@ -8,6 +8,7 @@ package org.hibernate.metamodel.mapping.internal; import java.util.ArrayList; import java.util.List; +import java.util.function.BiConsumer; import java.util.function.IntFunction; import org.hibernate.engine.spi.SharedSessionContractImplementor; @@ -35,6 +36,7 @@ import org.hibernate.sql.ast.Clause; import org.hibernate.sql.ast.SqlAstJoinType; import org.hibernate.sql.ast.spi.SqlAstCreationContext; import org.hibernate.sql.ast.spi.SqlExpressionResolver; +import org.hibernate.sql.ast.spi.SqlSelection; import org.hibernate.sql.ast.tree.expression.ColumnReference; import org.hibernate.sql.ast.tree.expression.Expression; import org.hibernate.sql.ast.tree.from.TableGroup; @@ -280,6 +282,23 @@ public class EmbeddedForeignKeyDescriptor implements ForeignKeyDescriptor { return createDomainResult( navigablePath, tableGroup, resultVariable, keyTable, keySide.getModelPart(), creationState ); } + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState) { + throw new UnsupportedOperationException(); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + throw new UnsupportedOperationException(); + } + private DomainResult createDomainResult( NavigablePath navigablePath, TableGroup tableGroup, diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleForeignKeyDescriptor.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleForeignKeyDescriptor.java index 1d16636212..5238ed620c 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleForeignKeyDescriptor.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/SimpleForeignKeyDescriptor.java @@ -8,6 +8,7 @@ package org.hibernate.metamodel.mapping.internal; import java.util.Collections; import java.util.List; +import java.util.function.BiConsumer; import java.util.function.IntFunction; import org.hibernate.engine.FetchStyle; @@ -205,6 +206,23 @@ public class SimpleForeignKeyDescriptor implements ForeignKeyDescriptor, BasicVa return createDomainResult( navigablePath, tableGroup, keySide.getModelPart(), creationState ); } + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState) { + throw new UnsupportedOperationException(); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + throw new UnsupportedOperationException(); + } + private DomainResult createDomainResult( NavigablePath navigablePath, TableGroup tableGroup, diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Column.java b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Column.java index 138ac89b2f..a65ea791c3 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Column.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/relational/Column.java @@ -6,11 +6,7 @@ */ package org.hibernate.metamodel.relational; -import org.hibernate.NotYetImplementedFor6Exception; -import org.hibernate.annotations.ColumnTransformer; -import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.metamodel.mapping.JdbcMapping; -import org.hibernate.sql.ast.tree.from.ColumnReferenceQualifier; /** * @author Steve Ebersole @@ -21,20 +17,4 @@ public interface Column { Table getTable(); JdbcMapping getJdbcMapping(); - - /** - * Render this Column's expression for reading accounting for any - * configured {@link ColumnTransformer#read()} - */ - default String renderForRead(ColumnReferenceQualifier qualifier, SessionFactoryImplementor sessionFactory) { - throw new NotYetImplementedFor6Exception( getClass() ); - } - - /** - * Render this Column's expression for reading accounting for any - * configured {@link ColumnTransformer#write()} - */ - default String renderForWrite(SessionFactoryImplementor sessionFactory) { - throw new NotYetImplementedFor6Exception( getClass() ); - } } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/CollectionPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/CollectionPersister.java index 31e368ce79..e5f33d0288 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/CollectionPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/CollectionPersister.java @@ -15,7 +15,6 @@ import java.util.function.Consumer; import org.hibernate.Filter; import org.hibernate.HibernateException; import org.hibernate.MappingException; -import org.hibernate.NotYetImplementedFor6Exception; import org.hibernate.cache.spi.access.CollectionDataAccess; import org.hibernate.cache.spi.entry.CacheEntryStructure; import org.hibernate.collection.spi.CollectionSemantics; @@ -356,13 +355,8 @@ public interface CollectionPersister extends CollectionDefinition, Restrictable // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // mapping model - default CollectionSemantics getCollectionSemantics() { - throw new NotYetImplementedFor6Exception( - "The persister used for this collection [" + getNavigableRole() - + "] does not yet implement support for `" - + CollectionSemantics.class.getName() + "`" - ); - } + CollectionSemantics getCollectionSemantics(); + void applyBaseManyToManyRestrictions( Consumer predicateConsumer, diff --git a/hibernate-core/src/main/java/org/hibernate/persister/collection/QueryableCollection.java b/hibernate-core/src/main/java/org/hibernate/persister/collection/QueryableCollection.java index b69b18932f..111c56d723 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/collection/QueryableCollection.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/collection/QueryableCollection.java @@ -5,6 +5,7 @@ * See the lgpl.txt file in the root directory or . */ package org.hibernate.persister.collection; + import org.hibernate.FetchMode; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.persister.entity.Joinable; diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularBiDirectionalFetchImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularBiDirectionalFetchImpl.java index 6db0f5e6dd..4821182618 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularBiDirectionalFetchImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularBiDirectionalFetchImpl.java @@ -6,6 +6,8 @@ */ package org.hibernate.sql.results.internal.domain; +import java.util.function.BiConsumer; + import org.hibernate.LockMode; import org.hibernate.engine.FetchTiming; import org.hibernate.engine.spi.CollectionKey; @@ -28,6 +30,7 @@ import org.hibernate.persister.entity.UniqueKeyLoadable; import org.hibernate.proxy.HibernateProxy; import org.hibernate.query.NavigablePath; import org.hibernate.sql.ast.Clause; +import org.hibernate.sql.ast.spi.SqlSelection; import org.hibernate.sql.ast.tree.from.TableGroup; import org.hibernate.sql.results.graph.AssemblerCreationState; import org.hibernate.sql.results.graph.BiDirectionalFetch; @@ -354,4 +357,21 @@ public class CircularBiDirectionalFetchImpl implements BiDirectionalFetch, Assoc DomainResultCreationState creationState) { return fetchable.createDomainResult( navigablePath, tableGroup, resultVariable, creationState ); } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState) { + fetchable.applySqlSelections( navigablePath, tableGroup, creationState ); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + fetchable.applySqlSelections( navigablePath, tableGroup, creationState, selectionConsumer ); + } } diff --git a/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularFetchImpl.java b/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularFetchImpl.java index c520fe22a9..a84f6c6698 100644 --- a/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularFetchImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/sql/results/internal/domain/CircularFetchImpl.java @@ -6,6 +6,8 @@ */ package org.hibernate.sql.results.internal.domain; +import java.util.function.BiConsumer; + import org.hibernate.engine.FetchTiming; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.mapping.IndexedConsumer; @@ -20,6 +22,7 @@ import org.hibernate.metamodel.model.domain.NavigableRole; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.query.NavigablePath; import org.hibernate.sql.ast.Clause; +import org.hibernate.sql.ast.spi.SqlSelection; import org.hibernate.sql.ast.tree.from.TableGroup; import org.hibernate.sql.results.graph.AssemblerCreationState; import org.hibernate.sql.results.graph.BiDirectionalFetch; @@ -199,6 +202,23 @@ public class CircularFetchImpl implements BiDirectionalFetch, Association { return fetchable.createDomainResult( navigablePath, tableGroup,resultVariable, creationState ); } + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState) { + fetchable.applySqlSelections( navigablePath, tableGroup, creationState ); + } + + @Override + public void applySqlSelections( + NavigablePath navigablePath, + TableGroup tableGroup, + DomainResultCreationState creationState, + BiConsumer selectionConsumer) { + fetchable.applySqlSelections( navigablePath, tableGroup, creationState, selectionConsumer ); + } + @Override public EntityMappingType findContainingEntityMapping() { return fetchable.findContainingEntityMapping(); diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/cfg/persister/GoofyPersisterClassProvider.java b/hibernate-core/src/test/java/org/hibernate/orm/test/cfg/persister/GoofyPersisterClassProvider.java index 52a0f0a5ee..68fd76ab1d 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/cfg/persister/GoofyPersisterClassProvider.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/cfg/persister/GoofyPersisterClassProvider.java @@ -26,6 +26,7 @@ import org.hibernate.cache.spi.access.NaturalIdDataAccess; import org.hibernate.cache.spi.entry.CacheEntry; import org.hibernate.cache.spi.entry.CacheEntryStructure; import org.hibernate.cfg.NotYetImplementedException; +import org.hibernate.collection.spi.CollectionSemantics; import org.hibernate.collection.spi.PersistentCollection; import org.hibernate.engine.internal.MutableEntityEntryFactory; import org.hibernate.engine.spi.CascadeStyle; @@ -960,6 +961,11 @@ public class GoofyPersisterClassProvider implements PersisterClassResolver { return null; } + @Override + public CollectionSemantics getCollectionSemantics() { + return null; + } + @Override public void applyBaseManyToManyRestrictions(Consumer predicateConsumer, TableGroup tableGroup, boolean useQualifier, Map enabledFilters, Set treatAsDeclarations, SqlAstCreationState creationState) {