From 3f85f12fa7a050cd826e5893119a511b7bb2cbc5 Mon Sep 17 00:00:00 2001 From: Vasco Veloso Date: Mon, 31 Aug 2015 09:31:21 +0100 Subject: [PATCH] HibernateDomainExporter and inheritance with composite-id. --- .../querydsl/codegen/EntitySerializer.java | 15 ++++++++-- .../codegen/HibernateDomainExporterTest.java | 16 +++++++++++ .../com/querydsl/jpa/domain18/Route1.java | 28 +++++++++++++++++++ .../com/querydsl/jpa/domain18/Route2.java | 5 ++++ .../com/querydsl/jpa/domain18/RouteDbKey.java | 21 ++++++++++++++ .../src/test/resources/route1.hbm.xml | 20 +++++++++++++ .../src/test/resources/route2.hbm.xml | 9 ++++++ 7 files changed, 111 insertions(+), 3 deletions(-) create mode 100644 querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route1.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/Route2.java create mode 100644 querydsl-jpa-codegen/src/test/java/com/querydsl/jpa/domain18/RouteDbKey.java create mode 100644 querydsl-jpa-codegen/src/test/resources/route1.hbm.xml create mode 100644 querydsl-jpa-codegen/src/test/resources/route2.hbm.xml 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 @@ + + + + + +