diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java index 34831afd9..dca24d05d 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptorManager.java @@ -1019,6 +1019,7 @@ public class BeanDescriptorManager implements BeanDescriptorMap { // set bean controller, finder and listener setBeanControllerFinderListener(desc); deplyInherit.process(desc); + desc.checkInheritanceMapping(); createProperties.createProperties(desc); diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java index 358665e6e..16041a089 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java @@ -13,6 +13,9 @@ import java.util.List; import java.util.Map; import java.util.Set; +import javax.persistence.Entity; +import javax.persistence.MappedSuperclass; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -905,4 +908,32 @@ public class DeployBeanDescriptor { return list; } + /** + * Check the mapping for class inheritance + */ + public void checkInheritanceMapping() { + if (inheritInfo == null) { + checkInheritance(getBeanType()); + } + } + + /** + * Check valid mapping annotations on the class hierarchy. + */ + private void checkInheritance(Class beanType) { + + Class parent = beanType.getSuperclass(); + if (parent == null || Object.class.equals(parent)) { + // all good + return; + } + if (parent.isAnnotationPresent(Entity.class)) { + String msg = "Checking "+getBeanType()+" and found "+parent+" that has @Entity annotation rather than MappedSuperclass?"; + throw new IllegalStateException(msg); + } + if (parent.isAnnotationPresent(MappedSuperclass.class)) { + // continue checking + checkInheritance(parent); + } + } }