diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/MetamodelUnsupportedOperationException.java b/hibernate-core/src/main/java/org/hibernate/metamodel/MetamodelUnsupportedOperationException.java new file mode 100644 index 0000000000..3170f70993 --- /dev/null +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/MetamodelUnsupportedOperationException.java @@ -0,0 +1,16 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html + */ +package org.hibernate.metamodel; + +import org.hibernate.HibernateException; +import org.hibernate.metamodel.mapping.NonTransientException; + +public class MetamodelUnsupportedOperationException extends HibernateException implements NonTransientException { + public MetamodelUnsupportedOperationException(String message) { + super( message ); + } +} diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AttributeFactory.java b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AttributeFactory.java index 3419f3a25e..6592006a4b 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AttributeFactory.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/internal/AttributeFactory.java @@ -24,6 +24,7 @@ import org.hibernate.mapping.Property; import org.hibernate.mapping.Value; import org.hibernate.metamodel.AttributeClassification; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.RepresentationMode; import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart; import org.hibernate.metamodel.model.domain.AbstractIdentifiableType; @@ -493,7 +494,7 @@ else if ( propertyMapping.isComposite() ) { context ); } - throw new UnsupportedOperationException( "oops, we are missing something: " + propertyMapping ); + throw new MetamodelUnsupportedOperationException( "oops, we are missing something: " + propertyMapping ); } public static AttributeClassification determineSingularAssociationClassification(Member member) { diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java index 2b9f738618..72ac33407a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EmbeddableMappingType.java @@ -36,6 +36,7 @@ import org.hibernate.mapping.Property; import org.hibernate.mapping.Selectable; import org.hibernate.mapping.Table; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.internal.BasicAttributeMapping; import org.hibernate.metamodel.mapping.internal.DiscriminatedAssociationAttributeMapping; import org.hibernate.metamodel.mapping.internal.EmbeddedAttributeMapping; @@ -233,8 +234,12 @@ else if ( attributeMapping instanceof ToOneAttributeMapping ) { attributeMapping = toOne; currentIndex += attributeMapping.getJdbcTypeCount(); } + else if ( attributeMapping instanceof EmbeddedAttributeMapping ) { + attributeMapping = ( (EmbeddedAttributeMapping) attributeMapping ).copy( declaringType ); + currentIndex = attributeMapping.getJdbcTypeCount(); + } else { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "Only basic and to-one attributes are supported in composite fks" ); } this.attributeMappings.add( attributeMapping ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityMappingType.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityMappingType.java index c05cd4ee23..6d235b8a7c 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityMappingType.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/EntityMappingType.java @@ -18,6 +18,7 @@ import org.hibernate.loader.ast.spi.Loadable; import org.hibernate.loader.ast.spi.MultiNaturalIdLoader; import org.hibernate.loader.ast.spi.NaturalIdLoader; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.spi.EntityRepresentationStrategy; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.query.NavigablePath; @@ -354,7 +355,7 @@ default TableReference createPrimaryTableReference( SqlAliasBase sqlAliasBase, SqlExpressionResolver sqlExpressionResolver, SqlAstCreationContext creationContext) { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "Entity mapping does not support primary TableReference creation [" + getClass().getName() + " : " + getEntityName() + "]" ); @@ -366,7 +367,7 @@ default TableReferenceJoin createTableReferenceJoin( TableReference lhs, SqlExpressionResolver sqlExpressionResolver, SqlAstCreationContext creationContext) { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "Entity mapping does not support primary TableReference join creation [" + getClass().getName() + " : " + getEntityName() + "]" ); diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CompoundNaturalIdMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CompoundNaturalIdMapping.java index f504b581b0..e4a08533e9 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CompoundNaturalIdMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/CompoundNaturalIdMapping.java @@ -25,6 +25,7 @@ import org.hibernate.loader.ast.spi.MultiNaturalIdLoader; import org.hibernate.loader.ast.spi.NaturalIdLoader; import org.hibernate.mapping.IndexedConsumer; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.metamodel.mapping.ForeignKeyDescriptor; import org.hibernate.metamodel.mapping.JdbcMapping; @@ -155,7 +156,7 @@ public Object[] normalizeInput(Object incoming, SharedSessionContractImplementor return values; } - throw new UnsupportedOperationException( "Do not know how to normalize compound natural-id value : " + incoming ); + throw new MetamodelUnsupportedOperationException( "Do not know how to normalize compound natural-id value : " + incoming ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java index 594cf5efa7..fbd8d4cc83 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/EmbeddedAttributeMapping.java @@ -14,6 +14,7 @@ import org.hibernate.engine.FetchTiming; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.internal.util.collections.CollectionHelper; +import org.hibernate.metamodel.mapping.AttributeMapping; import org.hibernate.metamodel.mapping.EmbeddableMappingType; import org.hibernate.metamodel.mapping.EmbeddableValuedModelPart; import org.hibernate.metamodel.mapping.EntityMappingType; @@ -81,6 +82,35 @@ public EmbeddedAttributeMapping( ManagedMappingType declaringType, PropertyAccess propertyAccess, ValueGeneration valueGeneration) { + this( + name, + navigableRole, + stateArrayPosition, + tableExpression, + attributeMetadataAccess, + getPropertyAccess(parentInjectionAttributeName, embeddableMappingType), + mappedFetchTiming, + mappedFetchStyle, + embeddableMappingType, + declaringType, + propertyAccess, + valueGeneration + ); + } + + public EmbeddedAttributeMapping( + String name, + NavigableRole navigableRole, + int stateArrayPosition, + String tableExpression, + StateArrayContributorMetadataAccess attributeMetadataAccess, + PropertyAccess parentInjectionAttributePropertyAccess, + FetchTiming mappedFetchTiming, + FetchStyle mappedFetchStyle, + EmbeddableMappingType embeddableMappingType, + ManagedMappingType declaringType, + PropertyAccess propertyAccess, + ValueGeneration valueGeneration) { super( name, stateArrayPosition, @@ -93,19 +123,11 @@ public EmbeddedAttributeMapping( ); this.navigableRole = navigableRole; - if ( parentInjectionAttributeName != null ) { - parentInjectionAttributePropertyAccess = PropertyAccessStrategyBasicImpl.INSTANCE.buildPropertyAccess( - embeddableMappingType.getMappedJavaTypeDescriptor().getJavaTypeClass(), - parentInjectionAttributeName - ); - } - else { - parentInjectionAttributePropertyAccess = null; - } - + this.parentInjectionAttributePropertyAccess = parentInjectionAttributePropertyAccess; this.tableExpression = tableExpression; this.embeddableMappingType = embeddableMappingType; + } // Constructor is only used for creating the inverse attribute mapping @@ -345,4 +367,37 @@ public int getNumberOfFetchables() { public String toString() { return "EmbeddedAttributeMapping(" + navigableRole + ")@" + System.identityHashCode( this ); } + + public AttributeMapping copy(ManagedMappingType declaringType) { + return new EmbeddedAttributeMapping( + getAttributeName(), + getNavigableRole(), + getStateArrayPosition(), + tableExpression, + getAttributeMetadataAccess(), + getParentInjectionAttributePropertyAccess(), + getTiming(), + getStyle(), + getEmbeddableTypeDescriptor(), + declaringType, + getPropertyAccess(), + getValueGeneration() + ); + } + + private static PropertyAccess getPropertyAccess( + String parentInjectionAttributeName, + EmbeddableMappingType embeddableMappingType) { + final PropertyAccess parentInjectionAttributePropertyAccess; + if ( parentInjectionAttributeName != null ) { + parentInjectionAttributePropertyAccess = PropertyAccessStrategyBasicImpl.INSTANCE.buildPropertyAccess( + embeddableMappingType.getMappedJavaTypeDescriptor().getJavaTypeClass(), + parentInjectionAttributeName + ); + } + else { + parentInjectionAttributePropertyAccess = null; + } + return parentInjectionAttributePropertyAccess; + } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java index e8ab781455..15e3e2bc6a 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/GeneratedValuesProcessor.java @@ -17,6 +17,7 @@ import org.hibernate.engine.spi.SessionFactoryImplementor; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.loader.ast.internal.LoaderSelectBuilder; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.metamodel.mapping.GeneratedValueResolver; import org.hibernate.metamodel.mapping.InDatabaseGeneratedValueResolver; @@ -165,7 +166,7 @@ public QueryParameterBindings getQueryParameterBindings() { @Override public Callback getCallback() { - throw new UnsupportedOperationException( "Follow-on locking not supported yet" ); + throw new MetamodelUnsupportedOperationException( "Follow-on locking not supported yet" ); } }, diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/NoGeneratedValueResolver.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/NoGeneratedValueResolver.java index e9d1aec848..984a6ae385 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/NoGeneratedValueResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/NoGeneratedValueResolver.java @@ -7,6 +7,7 @@ package org.hibernate.metamodel.mapping.internal; import org.hibernate.engine.spi.SharedSessionContractImplementor; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.GeneratedValueResolver; import org.hibernate.tuple.GenerationTiming; @@ -26,6 +27,6 @@ public GenerationTiming getGenerationTiming() { @Override public Object resolveGeneratedValue(Object[] row, Object entity, SharedSessionContractImplementor session) { - throw new UnsupportedOperationException( "NoGeneratedValueResolver does not support generated values" ); + throw new MetamodelUnsupportedOperationException( "NoGeneratedValueResolver does not support generated values" ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ordering/ast/ColumnReference.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ordering/ast/ColumnReference.java index 558d461114..bf70102460 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ordering/ast/ColumnReference.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/ordering/ast/ColumnReference.java @@ -6,6 +6,7 @@ */ package org.hibernate.metamodel.mapping.ordering.ast; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.MappingType; import org.hibernate.metamodel.mapping.ModelPartContainer; import org.hibernate.metamodel.mapping.PluralAttributeMapping; @@ -54,7 +55,7 @@ public SequencePart resolvePathPart( String name, boolean isTerminal, TranslationContext translationContext) { - throw new UnsupportedOperationException( "ColumnReference cannot be de-referenced" ); + throw new MetamodelUnsupportedOperationException( "ColumnReference cannot be de-referenced" ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/AbstractIdentifiableType.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/AbstractIdentifiableType.java index ad217684af..45285261c8 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/AbstractIdentifiableType.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/AbstractIdentifiableType.java @@ -15,6 +15,7 @@ import jakarta.persistence.metamodel.IdentifiableType; import jakarta.persistence.metamodel.SingularAttribute; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.EntityIdentifierMapping; import org.hibernate.metamodel.model.domain.internal.BasicSqmPathSource; import org.hibernate.metamodel.model.domain.internal.EmbeddedSqmPathSource; @@ -417,7 +418,7 @@ else if ( nonAggregatedIdAttributes != null && ! nonAggregatedIdAttributes.isEmp } else { if ( isIdMappingRequired() ) { - throw new UnsupportedOperationException( "Could not build SqmPathSource for entity identifier : " + getTypeName() ); + throw new MetamodelUnsupportedOperationException( "Could not build SqmPathSource for entity identifier : " + getTypeName() ); } return null; } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AnyMappingSqmPathSource.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AnyMappingSqmPathSource.java index fc56abd8df..ce40daa25b 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AnyMappingSqmPathSource.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AnyMappingSqmPathSource.java @@ -6,6 +6,7 @@ */ package org.hibernate.metamodel.model.domain.internal; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.model.domain.AnyMappingDomainType; import org.hibernate.metamodel.model.domain.BasicDomainType; import org.hibernate.query.NavigablePath; @@ -42,7 +43,7 @@ public SqmPathSource findSubPathSource(String name) { return keyPathSource; } - throw new UnsupportedOperationException( "De-referencing parts of an ANY mapping, other than the key, is not supported" ); + throw new MetamodelUnsupportedOperationException( "De-referencing parts of an ANY mapping, other than the key, is not supported" ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/ArrayTupleType.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/ArrayTupleType.java index 122a71792b..9eaf06648d 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/ArrayTupleType.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/ArrayTupleType.java @@ -9,6 +9,7 @@ import java.util.Arrays; import java.util.List; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.MappingModelExpressable; import org.hibernate.metamodel.model.domain.AllowableFunctionReturnType; import org.hibernate.metamodel.model.domain.AllowableParameterType; @@ -46,12 +47,12 @@ public int componentCount() { @Override public String getComponentName(int index) { - throw new UnsupportedOperationException( "Array tuple has no component names" ); + throw new MetamodelUnsupportedOperationException( "Array tuple has no component names" ); } @Override public List getComponentNames() { - throw new UnsupportedOperationException( "Array tuple has no component names" ); + throw new MetamodelUnsupportedOperationException( "Array tuple has no component names" ); } @Override @@ -61,7 +62,7 @@ public SqmExpressable get(int index) { @Override public SqmExpressable get(String componentName) { - throw new UnsupportedOperationException( "Array tuple has no component names" ); + throw new MetamodelUnsupportedOperationException( "Array tuple has no component names" ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AttributeContainer.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AttributeContainer.java index bbd59362e9..3efbb6b047 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AttributeContainer.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/AttributeContainer.java @@ -9,6 +9,7 @@ import java.util.List; import java.util.Set; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.model.domain.EmbeddableDomainType; import org.hibernate.metamodel.model.domain.PersistentAttribute; import org.hibernate.metamodel.model.domain.SingularPersistentAttribute; @@ -30,7 +31,7 @@ interface InFlightAccess { * or an aggregated composite id ({@link jakarta.persistence.EmbeddedId}) */ default void applyIdAttribute(SingularPersistentAttribute idAttribute) { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "AttributeContainer [" + getClass().getName() + "] does not support identifiers" ); } @@ -38,7 +39,7 @@ default void applyIdAttribute(SingularPersistentAttribute idAttribute) { default void applyNonAggregatedIdAttributes( Set> idAttributes, EmbeddableDomainType idClassType) { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "AttributeContainer [" + getClass().getName() + "] does not support identifiers" ); } @@ -49,13 +50,13 @@ default void applyNonAggregatedIdAttributes( * because of its dependence on declaring-type, etc that we may not be able to do */ default void applyIdClassAttributes(Set> idClassAttributes) { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "AttributeContainer [" + getClass().getName() + "] does not support identifiers" ); } default void applyVersionAttribute(SingularPersistentAttribute versionAttribute) { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "AttributeContainer [" + getClass().getName() + "] does not support versions" ); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/DiscriminatorSqmPath.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/DiscriminatorSqmPath.java index 1d28c856fa..03e0ae6617 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/DiscriminatorSqmPath.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/DiscriminatorSqmPath.java @@ -6,6 +6,7 @@ */ package org.hibernate.metamodel.model.domain.internal; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.EntityDiscriminatorMapping; import org.hibernate.metamodel.mapping.EntityMappingType; import org.hibernate.metamodel.mapping.EntityValuedModelPart; @@ -92,11 +93,11 @@ public SemanticPathPart resolvePathPart(String name, boolean isTerminal, SqmCrea @Override public SqmTreatedPath treatAs(Class treatJavaType) throws PathException { - throw new UnsupportedOperationException( "Cannot apply TREAT operator to discriminator path" ); + throw new MetamodelUnsupportedOperationException( "Cannot apply TREAT operator to discriminator path" ); } @Override public SqmTreatedPath treatAs(EntityDomainType treatTarget) throws PathException { - throw new UnsupportedOperationException( "Cannot apply TREAT operator to discriminator path" ); + throw new MetamodelUnsupportedOperationException( "Cannot apply TREAT operator to discriminator path" ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/EntityTypeImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/EntityTypeImpl.java index 959bb6c164..6604bbc702 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/EntityTypeImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/EntityTypeImpl.java @@ -13,6 +13,8 @@ import org.hibernate.graph.internal.SubGraphImpl; import org.hibernate.graph.spi.SubGraphImplementor; import org.hibernate.mapping.PersistentClass; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.EntityDiscriminatorMapping; import org.hibernate.metamodel.mapping.EntityIdentifierMapping; import org.hibernate.metamodel.model.domain.AbstractIdentifiableType; @@ -187,7 +189,7 @@ public String toString() { @Override public SqmPath createSqmPath(SqmPath lhs, SqmPathSource intermediatePathSource) { - throw new UnsupportedOperationException( + throw new MetamodelUnsupportedOperationException( "EntityType cannot be used to create an SqmPath - that would be an SqmFrom which are created directly" ); } diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java index 7be4355d6a..8c3178c297 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/MappingMetamodelImpl.java @@ -47,6 +47,7 @@ import org.hibernate.mapping.MappedSuperclass; import org.hibernate.mapping.PersistentClass; import org.hibernate.metamodel.MappingMetamodel; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.internal.JpaStaticMetaModelPopulationSetting; import org.hibernate.metamodel.mapping.MappingModelExpressable; import org.hibernate.metamodel.mapping.internal.MappingModelCreationProcess; @@ -766,13 +767,10 @@ private String[] doGetImplementors(Class clazz) throws MappingException { } @Override - public MappingModelExpressable lenientlyResolveMappingExpressable(SqmExpressable sqmExpressable, Function tableGroupLocator) { - try { - return resolveMappingExpressable( sqmExpressable, tableGroupLocator ); - } - catch (UnsupportedOperationException e) { - return null; - } + public MappingModelExpressable lenientlyResolveMappingExpressable( + SqmExpressable sqmExpressable, + Function tableGroupLocator) { + return resolveMappingExpressable( sqmExpressable, tableGroupLocator ); } @@ -831,8 +829,7 @@ public MappingModelExpressable resolveMappingExpressable(SqmExpressable sqmEx ? createdMappingModelExpressable : existingMappingModelExpressable; } - - throw new UnsupportedOperationException( "Cannot determine proper mapping model expressable for " + sqmExpressable ); + return null; } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/PluralAttributeBuilder.java b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/PluralAttributeBuilder.java index 86e315e60a..86b75ce5d9 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/PluralAttributeBuilder.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/model/domain/internal/PluralAttributeBuilder.java @@ -15,6 +15,7 @@ import org.hibernate.mapping.Property; import org.hibernate.metamodel.AttributeClassification; import org.hibernate.metamodel.CollectionClassification; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.internal.AttributeFactory; import org.hibernate.metamodel.internal.MetadataContext; import org.hibernate.metamodel.internal.PluralAttributeMetadata; @@ -124,7 +125,7 @@ else if ( Collection.class.isAssignableFrom( attributeJtd.getJavaTypeClass() ) ) return new BagAttributeImpl<>( builder, metadataContext ); } - throw new UnsupportedOperationException( "Unknown collection: " + attributeJtd.getJavaType() ); + throw new MetamodelUnsupportedOperationException( "Unknown collection: " + attributeJtd.getJavaType() ); } private static SimpleDomainType determineListIndexOrMapKeyType( diff --git a/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java b/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java index 26c54cb261..6406bc87ec 100644 --- a/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java +++ b/hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java @@ -46,6 +46,7 @@ import org.hibernate.loader.MultipleBagFetchException; import org.hibernate.metamodel.CollectionClassification; import org.hibernate.metamodel.MappingMetamodel; +import org.hibernate.metamodel.MetamodelUnsupportedOperationException; import org.hibernate.metamodel.mapping.Association; import org.hibernate.metamodel.mapping.AttributeMapping; import org.hibernate.metamodel.mapping.BasicValuedMapping; @@ -3587,13 +3588,7 @@ protected Expression consumeSingleSqmParameter(SqmParameter sqmParameter) { } protected MappingModelExpressable lenientlyResolveMappingExpressable(SqmExpressable nodeType) { - try { - return resolveMappingExpressable( nodeType ); - } - catch (UnsupportedOperationException e) { - // todo (6.0) : log? - return null; - } + return resolveMappingExpressable( nodeType ); } protected MappingModelExpressable resolveMappingExpressable(SqmExpressable nodeType) { @@ -4544,14 +4539,9 @@ public CaseSearchedExpression visitSearchedCaseExpression(SqmCaseSearched exp } private MappingModelExpressable determineCurrentExpressable(SqmTypedNode expression) { - try { - return creationContext - .getDomainModel() - .resolveMappingExpressable( expression.getNodeType(), getFromClauseIndex()::findTableGroup ); - } - catch (UnsupportedOperationException e) { - return null; - } + return creationContext + .getDomainModel() + .resolveMappingExpressable( expression.getNodeType(), getFromClauseIndex()::findTableGroup ); } private X visitWithInferredType(SqmExpression expression, SqmExpression inferred) { @@ -4567,28 +4557,23 @@ private X visitWithInferredType(SqmExpression expression, SqmExpression X visitWithLenientInferredType(SqmExpression expression, SqmExpression inferred) { inferrableTypeAccessStack.push( () -> { - try { - final MappingModelExpressable definedType = creationContext - .getDomainModel() - .resolveMappingExpressable( expression.getNodeType(), getFromClauseIndex()::findTableGroup ); - if ( definedType != null ) { - return definedType; - } + MappingModelExpressable definedType = creationContext + .getDomainModel() + .resolveMappingExpressable( + expression.getNodeType(), + getFromClauseIndex()::findTableGroup + ); + if ( definedType != null ) { + return definedType; } - catch (UnsupportedOperationException ignore) { - // todo (6.0) : log? - } - - try { - final MappingModelExpressable definedType = creationContext - .getDomainModel() - .lenientlyResolveMappingExpressable( inferred.getNodeType(), getFromClauseIndex()::findTableGroup ); - if ( definedType != null ) { - return definedType; - } - } - catch (UnsupportedOperationException ignore) { - // todo (6.0) : log? + definedType = creationContext + .getDomainModel() + .lenientlyResolveMappingExpressable( + inferred.getNodeType(), + getFromClauseIndex()::findTableGroup + ); + if ( definedType != null ) { + return definedType; } return null; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Dependent.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Dependent.java similarity index 93% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Dependent.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Dependent.java index 58c568974d..35dbc2709d 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Dependent.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Dependent.java @@ -7,7 +7,7 @@ // $Id:$ -package org.hibernate.test.annotations.derivedidentities; +package org.hibernate.orm.test.annotations.derivedidentities; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; import jakarta.persistence.ManyToOne; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/DependentId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/DependentId.java similarity index 91% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/DependentId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/DependentId.java index f468f66fa6..47bcd72902 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/DependentId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/DependentId.java @@ -7,7 +7,7 @@ // $Id:$ -package org.hibernate.test.annotations.derivedidentities; +package org.hibernate.orm.test.annotations.derivedidentities; import java.io.Serializable; import jakarta.persistence.Embeddable; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Employee.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Employee.java similarity index 91% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Employee.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Employee.java index a9f669e708..3fe9298569 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Employee.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Employee.java @@ -6,7 +6,7 @@ */ // $Id:$ -package org.hibernate.test.annotations.derivedidentities; +package org.hibernate.orm.test.annotations.derivedidentities; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.Id; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Employer.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Employer.java similarity index 92% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Employer.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Employer.java index d6da9a55cc..356ca6c0ae 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Employer.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Employer.java @@ -7,7 +7,7 @@ // $Id:$ -package org.hibernate.test.annotations.derivedidentities; +package org.hibernate.orm.test.annotations.derivedidentities; import jakarta.persistence.Entity; import jakarta.persistence.Id; import jakarta.persistence.IdClass; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/EmployerId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/EmployerId.java similarity index 91% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/EmployerId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/EmployerId.java index 577fb9a10f..bd6e6dac35 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/EmployerId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/EmployerId.java @@ -7,7 +7,7 @@ // $Id:$ -package org.hibernate.test.annotations.derivedidentities; +package org.hibernate.orm.test.annotations.derivedidentities; import java.io.Serializable; /** diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/MedicalHistory.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/MedicalHistory.java similarity index 92% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/MedicalHistory.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/MedicalHistory.java index c10652504f..44dc6dbd3b 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/MedicalHistory.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/MedicalHistory.java @@ -7,7 +7,7 @@ // $Id:$ -package org.hibernate.test.annotations.derivedidentities; +package org.hibernate.orm.test.annotations.derivedidentities; import jakarta.persistence.Id; import jakarta.persistence.JoinColumn; import jakarta.persistence.Lob; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Person.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Person.java similarity index 89% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Person.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Person.java index 8e346a918e..6131bfa295 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/Person.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/Person.java @@ -7,7 +7,7 @@ // $Id:$ -package org.hibernate.test.annotations.derivedidentities; +package org.hibernate.orm.test.annotations.derivedidentities; import jakarta.persistence.Entity; import jakarta.persistence.Id; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Dependent.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Dependent.java similarity index 82% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Dependent.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Dependent.java index 15cd0bbf12..db41b9c7ae 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Dependent.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Dependent.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b2; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b2; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/DependentId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/DependentId.java similarity index 71% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/DependentId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/DependentId.java index 04ddbe56e0..43ec602389 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/DependentId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/DependentId.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b2; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b2; import jakarta.persistence.Embeddable; import java.io.Serializable; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest.java similarity index 58% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest.java index 8a5948a9dd..1a4786fa98 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest.java @@ -21,67 +21,72 @@ * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ -package org.hibernate.test.annotations.derivedidentities.e3.b2; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b2; -import org.hibernate.Session; +import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.orm.test.util.SchemaUtil; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertTrue; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Emmanuel Bernard * @author Matt Drees */ -public class DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest extends BaseNonConfigCoreFunctionalTestCase { +@DomainModel( + annotatedClasses = { Policy.class, Dependent.class, Employee.class } +) +@SessionFactory +public class DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdDepTest { @Test - public void testManyToOne() throws Exception { - assertTrue( SchemaUtil.isColumnPresent( "Dependent", "emp_firstName", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Dependent", "emp_lastName", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Dependent", "name", metadata() ) ); - assertTrue( !SchemaUtil.isColumnPresent( "Dependent", "firstName", metadata() ) ); - assertTrue( !SchemaUtil.isColumnPresent( "Dependent", "lastName", metadata() ) ); + public void testManyToOne(SessionFactoryScope scope) { + final MetadataImplementor metadata = scope.getMetadataImplementor(); + assertTrue( SchemaUtil.isColumnPresent( "Dependent", "emp_firstName", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Dependent", "emp_lastName", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Dependent", "name", metadata ) ); + assertTrue( !SchemaUtil.isColumnPresent( "Dependent", "firstName", metadata ) ); + assertTrue( !SchemaUtil.isColumnPresent( "Dependent", "lastName", metadata ) ); - assertTrue( SchemaUtil.isColumnPresent( "Policy", "dep_emp_firstName", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Policy", "dep_emp_lastName", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Policy", "type", metadata() ) ); - assertTrue( !SchemaUtil.isColumnPresent( "Policy", "firstName", metadata() ) ); - assertTrue( !SchemaUtil.isColumnPresent( "Policy", "lastName", metadata() ) ); - assertTrue( !SchemaUtil.isColumnPresent( "Policy", "name", metadata() ) ); + assertTrue( SchemaUtil.isColumnPresent( "Policy", "dep_emp_firstName", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Policy", "dep_emp_lastName", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Policy", "type", metadata ) ); + assertTrue( !SchemaUtil.isColumnPresent( "Policy", "firstName", metadata ) ); + assertTrue( !SchemaUtil.isColumnPresent( "Policy", "lastName", metadata ) ); + assertTrue( !SchemaUtil.isColumnPresent( "Policy", "name", metadata ) ); final Employee e = new Employee(); e.empId = new EmployeeId(); e.empId.firstName = "Emmanuel"; e.empId.lastName = "Bernard"; - final Session s = openSession(); - s.getTransaction().begin(); - s.persist( e ); - final Dependent d = new Dependent(); - d.emp = e; - d.id = new DependentId(); - d.id.name = "Doggy"; - s.persist( d ); - Policy p = new Policy(); - p.dep = d; - p.id = new PolicyId(); - p.id.type = "Vet Insurance"; - s.persist( p ); - s.flush(); - s.clear(); - p = (Policy) s.get( Policy.class, p.id ); - assertNotNull( p.dep ); - assertEquals( e.empId.firstName, p.dep.emp.empId.firstName ); - s.getTransaction().rollback(); - s.close(); - } + scope.inTransaction( + session -> { + session.persist( e ); + final Dependent d = new Dependent(); + d.emp = e; + d.id = new DependentId(); + d.id.name = "Doggy"; + session.persist( d ); + Policy p = new Policy(); + p.dep = d; + p.id = new PolicyId(); + p.id.type = "Vet Insurance"; + session.persist( p ); - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{Policy.class, Dependent.class, Employee.class}; + session.flush(); + session.clear(); + p = session.get( Policy.class, p.id ); + assertNotNull( p.dep ); + assertEquals( e.empId.firstName, p.dep.emp.empId.firstName ); + + } + ); } } diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Employee.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Employee.java similarity index 67% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Employee.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Employee.java index e954d5c652..49152717c1 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Employee.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Employee.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b3; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b2; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/EmployeeId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/EmployeeId.java similarity index 78% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/EmployeeId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/EmployeeId.java index cd3e3be879..b2101e565f 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/EmployeeId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/EmployeeId.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b3; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b2; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Policy.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Policy.java similarity index 82% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Policy.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Policy.java index 85598cb71e..58b18d9668 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Policy.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/Policy.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b2; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b2; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/PolicyId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/PolicyId.java similarity index 77% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/PolicyId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/PolicyId.java index 5a0a998b69..906dd11cae 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/PolicyId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b2/PolicyId.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b2; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b2; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Dependent.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Dependent.java similarity index 83% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Dependent.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Dependent.java index 313f5cbabf..7e1af01f33 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Dependent.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Dependent.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b3; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b3; import jakarta.persistence.*; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/DependentId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/DependentId.java similarity index 76% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/DependentId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/DependentId.java index 7e935f91ad..1d928feb98 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/DependentId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/DependentId.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b3; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b3; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest.java similarity index 56% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest.java index e26aeed43e..ad2fe5b8bc 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest.java @@ -21,61 +21,70 @@ * 51 Franklin Street, Fifth Floor * Boston, MA 02110-1301 USA */ -package org.hibernate.test.annotations.derivedidentities.e3.b3; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b3; -import org.hibernate.Session; +import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.orm.test.util.SchemaUtil; -import org.hibernate.testing.junit4.BaseNonConfigCoreFunctionalTestCase; -import org.junit.Test; -import static org.junit.Assert.*; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; /** * @author Emmanuel Bernard * @author Matt Drees */ -public class DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest extends BaseNonConfigCoreFunctionalTestCase { - @Test - public void testManyToOne() throws Exception { - assertTrue( SchemaUtil.isColumnPresent( "Dependent", "FIRSTNAME", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Dependent", "LASTNAME", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Dependent", "name", metadata() ) ); +@DomainModel( + annotatedClasses = { Policy.class, Dependent.class, Employee.class } +) +@SessionFactory +public class DerivedIdentityEmbeddedIdParentEmbeddedIdGrandparentEmbeddedIdColumnOverridesDepTest { - assertTrue( SchemaUtil.isColumnPresent( "Policy", "FIRSTNAME", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Policy", "LASTNAME", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Policy", "NAME", metadata() ) ); - assertTrue( SchemaUtil.isColumnPresent( "Policy", "type", metadata() ) ); + @Test + public void testManyToOne(SessionFactoryScope scope) { + final MetadataImplementor metadata = scope.getMetadataImplementor(); + assertTrue( SchemaUtil.isColumnPresent( "Dependent", "FIRSTNAME", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Dependent", "LASTNAME", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Dependent", "name", metadata ) ); + + assertTrue( SchemaUtil.isColumnPresent( "Policy", "FIRSTNAME", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Policy", "LASTNAME", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Policy", "NAME", metadata ) ); + assertTrue( SchemaUtil.isColumnPresent( "Policy", "type", metadata ) ); final Employee e = new Employee(); e.empId = new EmployeeId(); e.empId.firstName = "Emmanuel"; e.empId.lastName = "Bernard"; - final Session s = openSession(); - s.getTransaction().begin(); - s.persist( e ); - final Dependent d = new Dependent(); - d.emp = e; - d.id = new DependentId(); - d.id.name = "Doggy"; - s.persist( d ); - Policy p = new Policy(); - p.dep = d; - p.id = new PolicyId(); - p.id.type = "Vet Insurance"; - s.persist( p ); - s.flush(); - s.clear(); - p = (Policy) s.get( Policy.class, p.id ); - assertNotNull( p.dep ); - assertEquals( e.empId.firstName, p.dep.emp.empId.firstName ); - s.getTransaction().rollback(); - s.close(); + scope.inTransaction( + session -> { + session.persist( e ); + final Dependent d = new Dependent(); + d.emp = e; + d.id = new DependentId(); + d.id.name = "Doggy"; + session.persist( d ); + Policy p = new Policy(); + p.dep = d; + p.id = new PolicyId(); + p.id.type = "Vet Insurance"; + session.persist( p ); + + session.flush(); + session.clear(); + p = session.get( Policy.class, p.id ); + + assertNotNull( p.dep ); + assertEquals( e.empId.firstName, p.dep.emp.empId.firstName ); + } + ); } - @Override - protected Class[] getAnnotatedClasses() { - return new Class[]{Policy.class, Dependent.class, Employee.class}; - } } diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Employee.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Employee.java similarity index 67% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Employee.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Employee.java index ba8305f226..7ef2f88bc8 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/Employee.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Employee.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b2; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b3; import jakarta.persistence.EmbeddedId; import jakarta.persistence.Entity; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/EmployeeId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/EmployeeId.java similarity index 78% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/EmployeeId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/EmployeeId.java index 61e427b486..aa534006f7 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b2/EmployeeId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/EmployeeId.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b2; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b3; import jakarta.persistence.Column; import jakarta.persistence.Embeddable; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Policy.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Policy.java similarity index 85% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Policy.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Policy.java index 8e7fb9941a..f9de698011 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/Policy.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/Policy.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b3; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b3; import jakarta.persistence.*; diff --git a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/PolicyId.java b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/PolicyId.java similarity index 77% rename from hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/PolicyId.java rename to hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/PolicyId.java index 892b1cd77c..fcda3781dc 100644 --- a/hibernate-core/src/test/java/org/hibernate/test/annotations/derivedidentities/e3/b3/PolicyId.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/annotations/derivedidentities/e3/b3/PolicyId.java @@ -1,4 +1,4 @@ -package org.hibernate.test.annotations.derivedidentities.e3.b3; +package org.hibernate.orm.test.annotations.derivedidentities.e3.b3; import jakarta.persistence.Column; import jakarta.persistence.Embeddable;