diff --git a/hibernate-core/src/main/java/org/hibernate/UnknownEntityTypeException.java b/hibernate-core/src/main/java/org/hibernate/UnknownEntityTypeException.java index 55d579dc81e7..16399c6eb308 100644 --- a/hibernate-core/src/main/java/org/hibernate/UnknownEntityTypeException.java +++ b/hibernate-core/src/main/java/org/hibernate/UnknownEntityTypeException.java @@ -19,7 +19,7 @@ public UnknownEntityTypeException(String message, Throwable cause) { } public UnknownEntityTypeException(String entityName) { - super( "Unknown entity type: " + entityName ); + super( "Unknown entity type '" + entityName + "'" ); } public UnknownEntityTypeException(Class entityClass) { diff --git a/hibernate-core/src/main/java/org/hibernate/internal/CoordinatingEntityNameResolver.java b/hibernate-core/src/main/java/org/hibernate/internal/CoordinatingEntityNameResolver.java index d90c77d2868d..6b6f98452ad2 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/CoordinatingEntityNameResolver.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/CoordinatingEntityNameResolver.java @@ -7,7 +7,6 @@ import org.hibernate.EntityNameResolver; import org.hibernate.Interceptor; import org.hibernate.engine.spi.SessionFactoryImplementor; -import org.hibernate.metamodel.spi.MappingMetamodelImplementor; /** * @author Steve Ebersole @@ -28,15 +27,16 @@ public String resolveEntityName(Object entity) { return entityName; } - for ( EntityNameResolver resolver : sessionFactory.getSessionFactoryOptions().getEntityNameResolvers() ) { + for ( EntityNameResolver resolver : + sessionFactory.getSessionFactoryOptions().getEntityNameResolvers() ) { entityName = resolver.resolveEntityName( entity ); if ( entityName != null ) { return entityName; } } - final MappingMetamodelImplementor mappingMetamodel = sessionFactory.getMappingMetamodel(); - for ( EntityNameResolver resolver : mappingMetamodel.getEntityNameResolvers() ) { + for ( EntityNameResolver resolver : + sessionFactory.getMappingMetamodel().getEntityNameResolvers() ) { entityName = resolver.resolveEntityName( entity ); if ( entityName != null ) { return entityName; diff --git a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java index 9372938f4208..4f0500383a11 100644 --- a/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/internal/SessionImpl.java @@ -6,6 +6,7 @@ import jakarta.persistence.CacheRetrieveMode; import jakarta.persistence.CacheStoreMode; +import jakarta.persistence.Entity; import jakarta.persistence.EntityGraph; import jakarta.persistence.EntityNotFoundException; import jakarta.persistence.FindOption; @@ -1526,21 +1527,30 @@ public EntityPersister getEntityPersister(final String entityName, final Object return requireEntityPersister( guessEntityName( object ) ); } else { - // try block is a hack around fact that currently tuplizers are not - // given the opportunity to resolve a subclass entity name. this - // allows the (we assume custom) interceptor the ability to + // try block is a hack around fact that currently tuplizers are + // not given the opportunity to resolve a subclass entity name. + // This allows the (we assume custom) interceptor the ability to // influence this decision if we were not able to based on the // given entityName try { return requireEntityPersister( entityName ) .getSubclassEntityPersister( object, getFactory() ); } - catch ( HibernateException e ) { + catch ( UnknownEntityTypeException uee ) { try { return getEntityPersister( null, object ); } - catch ( HibernateException e2 ) { - throw e; + catch ( HibernateException e ) { + final Class objectClass = object.getClass(); + final String problem = + objectClass.isAnnotationPresent( Entity.class ) + ? "does not belong to this persistence unit" + : "is not annotated '@Entity'"; + throw new UnknownEntityTypeException( + uee.getMessage() + + " ('" + objectClass.getSimpleName() + "' " + problem + ")", + e + ); } } }