From eeaf27e97f14baa28718f5142d6b71b2adf2aa89 Mon Sep 17 00:00:00 2001 From: Vincent Bouthinon Date: Thu, 24 Oct 2024 16:52:10 +0200 Subject: [PATCH] HHH-18750 : @OneToMany with @Any mapped in secondary table KO (ClassCastException) Proposed solution: Follow the same approach as @ManyToOne for the second pass. For your information : @OneToMany with @ManyToOne that uses a @SecondaryTable works perfectly. https://hibernate.atlassian.net/browse/HHH-18750 --- .../metamodel/mapping/internal/ManyToManyCollectionPart.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ManyToManyCollectionPart.java b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ManyToManyCollectionPart.java index 9b6f9a19a8..c0425887f2 100644 --- a/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ManyToManyCollectionPart.java +++ b/hibernate-core/src/main/java/org/hibernate/metamodel/mapping/internal/ManyToManyCollectionPart.java @@ -398,7 +398,7 @@ public class ManyToManyCollectionPart extends AbstractEntityCollectionPart imple } else if ( StringHelper.isNotEmpty( bootCollectionDescriptor.getMappedByProperty() ) ) { final ModelPart mappedByPart = resolveNamedTargetPart( bootCollectionDescriptor.getMappedByProperty(), getAssociatedEntityMappingType(), collectionDescriptor ); - if ( mappedByPart instanceof ToOneAttributeMapping ) { + if ( mappedByPart instanceof ToOneAttributeMapping || mappedByPart instanceof DiscriminatedAssociationAttributeMapping ) { //////////////////////////////////////////////// // E.g. // @@ -425,7 +425,7 @@ public class ManyToManyCollectionPart extends AbstractEntityCollectionPart imple final ManyToOne elementDescriptor = (ManyToOne) bootCollectionDescriptor.getElement(); assert elementDescriptor.isReferenceToPrimaryKey(); - final String collectionTableName = ( (BasicCollectionPersister) collectionDescriptor ).getTableName(); + final String collectionTableName = collectionDescriptor.getTableName(); // this fk will refer to the associated entity's id. if that id is not ready yet, delay this creation if ( getAssociatedEntityMappingType().getIdentifierMapping() == null ) {