diff --git a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java index 0c211534b..f3c92d5e0 100644 --- a/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java +++ b/querydsl-jpa-codegen/src/main/java/com/mysema/query/jpa/codegen/HibernateDomainExporter.java @@ -47,6 +47,7 @@ import org.hibernate.mapping.PersistentClass; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.google.common.collect.Sets; import com.mysema.codegen.CodeWriter; import com.mysema.codegen.JavaWriter; import com.mysema.codegen.model.ClassType; @@ -312,6 +313,18 @@ public class HibernateDomainExporter { } } + // go through supertypes + Set additions = Sets.newHashSet(); + for (Map.Entry entry : allTypes.entrySet()) { + EntityType entityType = entry.getValue(); + if (entityType.getSuperType() != null && !allTypes.containsKey(entityType.getSuperType().getType().getFullName())) { + additions.add(entityType.getSuperType()); + } + } + + for (Supertype type : additions) { + type.setEntityType(createEntityType(type.getType(), superTypes)); + } } private void handleProperty(EntityType entityType, Class cl, org.hibernate.mapping.Property p) diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporterTest.java new file mode 100644 index 000000000..ac792c2e2 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/DomainExporterTest.java @@ -0,0 +1,29 @@ +package com.mysema.query.jpa.domain12; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; + +import org.hibernate.cfg.Configuration; +import org.junit.Test; + +import com.mysema.query.jpa.codegen.HibernateDomainExporter; +import com.mysema.util.FileUtils; + +public class DomainExporterTest { + + @Test + public void Execute() throws IOException { + File gen = new File("target/" + getClass().getSimpleName()); + FileUtils.delete(gen); + Configuration config = new Configuration(); + config.addFile(new File("src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml")); + HibernateDomainExporter exporter = new HibernateDomainExporter("Q", gen, config); + exporter.execute(); + + assertTrue(new File(gen, "com/mysema/query/jpa/domain12/QEntity.java").exists()); + assertTrue(new File(gen, "com/mysema/query/jpa/domain12/QSupertype.java").exists()); + } + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Entity.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Entity.java new file mode 100644 index 000000000..3babb46e2 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Entity.java @@ -0,0 +1,9 @@ +package com.mysema.query.jpa.domain12; + +public class Entity extends Supertype { + + String id; + + Entity entity; + +} diff --git a/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Supertype.java b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Supertype.java new file mode 100644 index 000000000..69986c722 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/java/com/mysema/query/jpa/domain12/Supertype.java @@ -0,0 +1,6 @@ +package com.mysema.query.jpa.domain12; + +public class Supertype { + + String property; +} diff --git a/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml b/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml new file mode 100644 index 000000000..30b532309 --- /dev/null +++ b/querydsl-jpa-codegen/src/test/resources/com/mysema/query/jpa/domain12/domain.hbm.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + \ No newline at end of file