diff --git a/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java b/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java index b9b00f889..28d7e4af3 100644 --- a/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java +++ b/querydsl-apt/src/main/java/com/mysema/query/apt/Processor.java @@ -123,9 +123,16 @@ public class Processor { processAnnotations(); // remove entity types from extensionTypes - for (String key : entityTypes.keySet()){ + for (String key : entityTypes.keySet()) { extensionTypes.remove(key); } + + // remove super types from others + for (String key : actualSupertypes.keySet()) { + entityTypes.remove(key); + extensionTypes.remove(key); + embeddables.remove(key); + } serializeTypes(); diff --git a/querydsl-apt/src/test/java/com/mysema/query/domain/EmbeddableDeepTest.java b/querydsl-apt/src/test/java/com/mysema/query/domain/EmbeddableDeepTest.java new file mode 100644 index 000000000..aabbd40d0 --- /dev/null +++ b/querydsl-apt/src/test/java/com/mysema/query/domain/EmbeddableDeepTest.java @@ -0,0 +1,53 @@ +package com.mysema.query.domain; + +import java.io.Serializable; + +import javax.persistence.Embeddable; +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.MappedSuperclass; + +import org.junit.Ignore; + +@Ignore +@SuppressWarnings("serial") +public class EmbeddableDeepTest { + + public enum SomeType { + a, b; + } + + @MappedSuperclass + public abstract class AValueObject implements Cloneable, Serializable { + + } + + @MappedSuperclass + public abstract class AEntity extends AValueObject { + + } + + @Entity + public class A extends AEntity { + + @Embedded + B b; + + } + + @Embeddable + public class B extends AValueObject { + + @Embedded + C c; + + } + + @Embeddable + public class C extends AValueObject { + + SomeType someType; + + } + +}