diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
index 50e444cff0..5820de9f6b 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
@@ -57,6 +57,7 @@ abstract class AbstractGenerator implements Generator {
boolean useSchemaVersionProvider = false;
boolean generateRecords = true;
boolean generatePojos = false;
+ boolean generatePojosEqualsAndHashCode = false;
boolean generateImmutablePojos = false;
boolean generateInterfaces = false;
boolean generateDaos = false;
@@ -64,7 +65,6 @@ abstract class AbstractGenerator implements Generator {
boolean generateValidationAnnotations = false;
boolean generateGlobalObjectReferences = true;
boolean fluentSetters = false;
- boolean generateEqualsAndHashCode = false;
protected GeneratorStrategyWrapper strategy;
@@ -228,13 +228,13 @@ abstract class AbstractGenerator implements Generator {
}
@Override
- public boolean generateEqualsAndHashCode() {
- return generateEqualsAndHashCode;
+ public boolean generatePojosEqualsAndHashCode() {
+ return generatePojosEqualsAndHashCode;
}
@Override
- public void setGenerateEqualsAndHashCode(boolean generateEqualsAndHashCode) {
- this.generateEqualsAndHashCode = generateEqualsAndHashCode;
+ public void setGeneratePojosEqualsAndHashCode(boolean generatePojosEqualsAndHashCode) {
+ this.generatePojosEqualsAndHashCode = generatePojosEqualsAndHashCode;
}
// ----
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
index 6fc34f1ab9..122e09755a 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
@@ -397,8 +397,8 @@ public class GenerationTool {
generator.setGenerateGlobalObjectReferences(g.getGenerate().isGlobalObjectReferences());
if (g.getGenerate().isFluentSetters() != null)
generator.setFluentSetters(g.getGenerate().isFluentSetters());
- if (g.getGenerate().isGenerateEqualsAndHashCode() != null)
- generator.setGenerateEqualsAndHashCode(g.getGenerate().isGenerateEqualsAndHashCode());
+ if (g.getGenerate().isPojosEqualsAndHashCode() != null)
+ generator.setGeneratePojosEqualsAndHashCode(g.getGenerate().isPojosEqualsAndHashCode());
if (!StringUtils.isBlank(g.getDatabase().getSchemaVersionProvider()))
generator.setUseSchemaVersionProvider(true);
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
index 49f38c7d0e..a4973b0090 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
@@ -203,14 +203,14 @@ public interface Generator {
void setFluentSetters(boolean fluentSetters);
/**
- * Whether equals and hashCode methods should be generated
+ * Whether equals and hashCode methods should be generated on POJOs
*/
- boolean generateEqualsAndHashCode();
+ boolean generatePojosEqualsAndHashCode();
/**
- * Whether equals and hashCode methods should be generated
+ * Whether equals and hashCode methods should be generated on POJOs
*/
- void setGenerateEqualsAndHashCode(boolean generateEqualsAndHashCode);
+ void setGeneratePojosEqualsAndHashCode(boolean generatePojosEqualsAndHashCode);
/**
* The target directory
diff --git a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
index 01b9257a2d..829f5244e1 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
@@ -1895,7 +1895,7 @@ public class JavaGenerator extends AbstractGenerator {
}
// equals
- if (generateEqualsAndHashCode()) {
+ if (generatePojosEqualsAndHashCode()) {
out.println();
out.tab(1).println("@Override");
out.tab(1).println("public boolean equals(Object obj) {");
@@ -1918,7 +1918,8 @@ public class JavaGenerator extends AbstractGenerator {
if (getJavaType(column.getType()).endsWith("[]")) {
out.tab(2).println("else if (!java.util.Arrays.equals(%s, other.%s))", columnMember, columnMember);
- } else {
+ }
+ else {
out.tab(2).println("else if (!%s.equals(other.%s))", columnMember, columnMember);
}
@@ -1930,7 +1931,7 @@ public class JavaGenerator extends AbstractGenerator {
}
// hashCode
- if (generateEqualsAndHashCode()) {
+ if (generatePojosEqualsAndHashCode()) {
out.println();
out.tab(1).println("@Override");
out.tab(1).println("public int hashCode() {");
@@ -1940,8 +1941,12 @@ public class JavaGenerator extends AbstractGenerator {
for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
- out.tab(2).println("result = prime * result + ((%s == null) ? 0 : %s.hashCode());",
- columnMember, columnMember);
+ if (getJavaType(column.getType()).endsWith("[]")) {
+ out.tab(2).println("result = prime * result + ((%s == null) ? 0 : java.util.Arrays.hashCode(%s));", columnMember, columnMember);
+ }
+ else {
+ out.tab(2).println("result = prime * result + ((%s == null) ? 0 : %s.hashCode());", columnMember, columnMember);
+ }
}
out.tab(2).println("return result;");
diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd
index ce8a3ace6d..cebb936d83 100644
--- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd
+++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.5.0.xsd
@@ -633,6 +633,11 @@
Generate POJOs for usage of the ResultQuery.fetchInto(Class) API
-->
+
+
+
-
-
-