HHH-18734 detect erroneous/unsupported use of @SQLRestriction on subclass entity

This commit is contained in:
Gavin King 2024-10-15 22:59:08 +02:00
parent 6913234e0e
commit 69f8b9af2d
1 changed files with 15 additions and 4 deletions

View File

@ -1310,10 +1310,8 @@ public class EntityBinder {
if ( persistentClass instanceof RootClass ) { if ( persistentClass instanceof RootClass ) {
bindRootEntity(); bindRootEntity();
} }
else if ( !isMutable() ) { else {
throw new AnnotationException("Entity class '" + annotatedClass.getName() checkSubclassEntity();
+ "' is annotated '@Immutable' but it is a subclass in an entity inheritance hierarchy"
+ " (only root classes may declare mutability)");
} }
ensureNoMutabilityPlan(); ensureNoMutabilityPlan();
@ -1323,6 +1321,19 @@ public class EntityBinder {
processNamedEntityGraphs(); processNamedEntityGraphs();
} }
private void checkSubclassEntity() {
if ( !isMutable() ) {
throw new AnnotationException( "Entity class '" + annotatedClass.getName()
+ "' is annotated '@Immutable' but it is a subclass in an entity inheritance hierarchy"
+ " (only a root class may declare its mutability)" );
}
if ( isNotEmpty( where ) ) {
throw new AnnotationException( "Entity class '" + annotatedClass.getName()
+ "' specifies an '@SQLRestriction' but it is a subclass in an entity inheritance hierarchy"
+ " (only a root class may be specify a restriction)" );
}
}
private void ensureNoMutabilityPlan() { private void ensureNoMutabilityPlan() {
if ( annotatedClass.hasAnnotationUsage( Mutability.class, getSourceModelContext() ) ) { if ( annotatedClass.hasAnnotationUsage( Mutability.class, getSourceModelContext() ) ) {
throw new MappingException( "@Mutability is not allowed on entity" ); throw new MappingException( "@Mutability is not allowed on entity" );