diff --git a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java
index a34cea14e..940ff5cbf 100644
--- a/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java
+++ b/querydsl-codegen/src/main/java/com/querydsl/codegen/EntitySerializer.java
@@ -64,18 +64,26 @@ public class EntitySerializer implements Serializer {
this.keywords = keywords;
}
+ private boolean superTypeHasEntityFields(EntityType model) {
+ Supertype superType = model.getSuperType();
+ return null != superType && null != superType.getEntityType()
+ && superType.getEntityType().hasEntityFields();
+ }
+
protected void constructors(EntityType model, SerializerConfig config,
CodeWriter writer) throws IOException {
+
String localName = writer.getRawName(model);
String genericName = writer.getGenericName(true, model);
- boolean hasEntityFields = model.hasEntityFields();
+ boolean hasEntityFields = model.hasEntityFields() || superTypeHasEntityFields(model);
boolean stringOrBoolean = model.getOriginalCategory() == TypeCategory.STRING
|| model.getOriginalCategory() == TypeCategory.BOOLEAN;
String thisOrSuper = hasEntityFields ? THIS : SUPER;
String additionalParams = getAdditionalConstructorParameter(model);
String classCast = localName.equals(genericName) ? EMPTY : "(Class) ";
+
// String
constructorsForVariables(writer, model);
@@ -91,6 +99,7 @@ public class EntitySerializer implements Serializer {
Type type = new ClassType(Path.class, new TypeExtends(simpleModel));
writer.beginConstructor(new Parameter("path", type));
}
+
if (!hasEntityFields) {
if (stringOrBoolean) {
writer.line("super(path.getMetadata());");
@@ -161,7 +170,7 @@ public class EntitySerializer implements Serializer {
boolean stringOrBoolean = model.getOriginalCategory() == TypeCategory.STRING
|| model.getOriginalCategory() == TypeCategory.BOOLEAN;
- boolean hasEntityFields = model.hasEntityFields();
+ boolean hasEntityFields = model.hasEntityFields() || superTypeHasEntityFields(model);
String thisOrSuper = hasEntityFields ? THIS : SUPER;
String additionalParams = hasEntityFields ? "" : getAdditionalConstructorParameter(model);
@@ -495,7 +504,7 @@ public class EntitySerializer implements Serializer {
inits.add(0, STAR);
String initsAsString = QUOTE + JOINER.join(inits) + QUOTE;
writer.privateStaticFinal(PATH_INITS_TYPE, "INITS", "new PathInits(" + initsAsString + ")");
- } else if (model.hasEntityFields()) {
+ } else if (model.hasEntityFields() || superTypeHasEntityFields(model)) {
writer.privateStaticFinal(PATH_INITS_TYPE, "INITS", "PathInits.DIRECT2");
}
}
diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/HibernateDomainExporterTest.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/HibernateDomainExporterTest.java
index 0102e9613..6373421e5 100644
--- a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/HibernateDomainExporterTest.java
+++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/codegen/HibernateDomainExporterTest.java
@@ -189,6 +189,22 @@ public class HibernateDomainExporterTest {
CompileUtils.compile("target/gen5");
}
+ @Test
+ public void Execute_CompositeKey() throws IOException {
+ // See https://github.com/querydsl/querydsl/issues/1459
+
+ FileUtils.delete(new File("target/gen18"));
+
+ Configuration config = new Configuration();
+ config.addFile(new File("src/test/resources/route1.hbm.xml"));
+ config.addFile(new File("src/test/resources/route2.hbm.xml"));
+ HibernateDomainExporter exporter = new HibernateDomainExporter("Q",
+ new File("target/gen18"), serializerConfig, config);
+ exporter.execute();
+
+ CompileUtils.compile("target/gen18");
+ }
+
private static void assertContains(File file, String... strings) throws IOException {
assertTrue(file.getPath() + " doesn't exist", file.exists());
String result = Files.toString(file, Charsets.UTF_8);
diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route1.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route1.java
new file mode 100644
index 000000000..43a1614ff
--- /dev/null
+++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route1.java
@@ -0,0 +1,28 @@
+package com.querydsl.jpa.domain18;
+
+public class Route1 {
+
+ private RouteDbKey routeKey;
+ private int version;
+ private int cost;
+
+ public RouteDbKey getRouteKey() {
+ return routeKey;
+ }
+ public void setRouteKey(RouteDbKey routeKey) {
+ this.routeKey = routeKey;
+ }
+ public int getVersion() {
+ return version;
+ }
+ public void setVersion(int version) {
+ this.version = version;
+ }
+ public int getCost() {
+ return cost;
+ }
+ public void setCost(int cost) {
+ this.cost = cost;
+ }
+
+}
diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route2.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route2.java
new file mode 100644
index 000000000..20ca81e47
--- /dev/null
+++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route2.java
@@ -0,0 +1,5 @@
+package com.querydsl.jpa.domain18;
+
+public class Route2 extends Route1 {
+
+}
diff --git a/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/RouteDbKey.java b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/RouteDbKey.java
new file mode 100644
index 000000000..b9a316d02
--- /dev/null
+++ b/querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/RouteDbKey.java
@@ -0,0 +1,21 @@
+package com.querydsl.jpa.domain18;
+
+public class RouteDbKey {
+
+ private String type;
+ private String key;
+
+ public String getType() {
+ return type;
+ }
+ public void setType(String type) {
+ this.type = type;
+ }
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+}
diff --git a/querydsl-jpa-codegen/src/test/resources/route1.hbm.xml b/querydsl-jpa-codegen/src/test/resources/route1.hbm.xml
new file mode 100644
index 000000000..a8bf27f55
--- /dev/null
+++ b/querydsl-jpa-codegen/src/test/resources/route1.hbm.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/querydsl-jpa-codegen/src/test/resources/route2.hbm.xml b/querydsl-jpa-codegen/src/test/resources/route2.hbm.xml
new file mode 100644
index 000000000..b9672a0eb
--- /dev/null
+++ b/querydsl-jpa-codegen/src/test/resources/route2.hbm.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+