HHH-13172 Log a warning instead of throwing an exception when

@AttributeOverride is used in conjunction with entity inheritance

(cherry picked from commit 2dd008adb7)
This commit is contained in:
Guillaume Smet 2018-12-25 14:06:43 +01:00 committed by Gail Badner
parent 14f5473fef
commit b1ffde0e94
3 changed files with 23 additions and 23 deletions

View File

@ -561,10 +561,7 @@ public final class AnnotationBinder {
if(superEntity != null && ( if(superEntity != null && (
clazzToProcess.getAnnotation( AttributeOverride.class ) != null || clazzToProcess.getAnnotation( AttributeOverride.class ) != null ||
clazzToProcess.getAnnotation( AttributeOverrides.class ) != null ) ) { clazzToProcess.getAnnotation( AttributeOverrides.class ) != null ) ) {
throw new AnnotationException( LOG.unsupportedAttributeOverrideWithEntityInheritance( clazzToProcess.getName() );
"An entity annotated with @Inheritance cannot use @AttributeOverride or @AttributeOverrides: " +
clazzToProcess.getName()
);
} }
PersistentClass persistentClass = makePersistentClass( inheritanceState, superEntity, context ); PersistentClass persistentClass = makePersistentClass( inheritanceState, superEntity, context );

View File

@ -1830,4 +1830,6 @@ public interface CoreMessageLogger extends BasicLogger {
@LogMessage(level = DEBUG) @LogMessage(level = DEBUG)
@Message(value = "Detaching an uninitialized collection with queued operations from a session due to rollback: %s", id = 498) @Message(value = "Detaching an uninitialized collection with queued operations from a session due to rollback: %s", id = 498)
void queuedOperationWhenDetachFromSessionOnRollback(String collectionInfoString); void queuedOperationWhenDetachFromSessionOnRollback(String collectionInfoString);
@Message(value = "Using @AttributeOverride or @AttributeOverrides in conjunction with entity inheritance is not supported: %s. The overriding definitions are ignored.", id = 499)
void unsupportedAttributeOverrideWithEntityInheritance(String entityName);
} }

View File

@ -6,36 +6,39 @@
*/ */
package org.hibernate.test.annotations.override.inheritance; package org.hibernate.test.annotations.override.inheritance;
import static org.junit.Assert.assertTrue;
import javax.persistence.AttributeOverride; import javax.persistence.AttributeOverride;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.Id; import javax.persistence.Id;
import javax.persistence.Inheritance; import javax.persistence.Inheritance;
import javax.persistence.InheritanceType; import javax.persistence.InheritanceType;
import javax.persistence.MappedSuperclass;
import javax.persistence.Table; import javax.persistence.Table;
import javax.persistence.UniqueConstraint; import javax.persistence.UniqueConstraint;
import org.hibernate.AnnotationException; import org.hibernate.cfg.AnnotationBinder;
import org.hibernate.internal.CoreMessageLogger;
import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase; import org.hibernate.jpa.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.testing.FailureExpected;
import org.hibernate.testing.TestForIssue; import org.hibernate.testing.TestForIssue;
import org.hibernate.testing.logger.LoggerInspectionRule;
import org.hibernate.testing.logger.Triggerable;
import org.jboss.logging.Logger;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import static org.hibernate.testing.transaction.TransactionUtil.doInJPA;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
/** /**
* @author Vlad Mihalcea * @author Vlad Mihalcea
*/ */
@TestForIssue( jiraKey = "HHH-12609, HHH-12654" ) @TestForIssue( jiraKey = "HHH-12609, HHH-12654, HHH-13172" )
public class EntityInheritanceAttributeOverrideTest extends BaseEntityManagerFunctionalTestCase { public class EntityInheritanceAttributeOverrideTest extends BaseEntityManagerFunctionalTestCase {
@Rule
public LoggerInspectionRule logInspection = new LoggerInspectionRule(
Logger.getMessageLogger( CoreMessageLogger.class, AnnotationBinder.class.getName() ) );
@Override @Override
public Class[] getAnnotatedClasses() { public Class<?>[] getAnnotatedClasses() {
return new Class[]{ return new Class[]{
CategoryEntity.class, CategoryEntity.class,
TaxonEntity.class, TaxonEntity.class,
@ -45,13 +48,11 @@ public class EntityInheritanceAttributeOverrideTest extends BaseEntityManagerFun
@Override @Override
public void buildEntityManagerFactory() { public void buildEntityManagerFactory() {
try { Triggerable warningLogged = logInspection.watchForLogMessages( "HHH000499:" );
super.buildEntityManagerFactory(); super.buildEntityManagerFactory();
fail("Should throw AnnotationException");
} assertTrue("A warning should have been logged for this unsupported configuration", warningLogged.wasTriggered());
catch (AnnotationException e) {
assertTrue( e.getMessage().startsWith( "An entity annotated with @Inheritance cannot use @AttributeOverride or @AttributeOverrides" ) );
}
} }
@Test @Test