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 d21d583ebd..a04bac7d5f 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/AbstractGenerator.java
@@ -60,6 +60,7 @@ abstract class AbstractGenerator implements Generator {
boolean generateRecords = true;
boolean generatePojos = false;
boolean generatePojosEqualsAndHashCode = false;
+ boolean generatePojosToString = true;
boolean generateImmutablePojos = false;
boolean generateInterfaces = false;
boolean generateDaos = false;
@@ -304,6 +305,16 @@ abstract class AbstractGenerator implements Generator {
this.generatePojosEqualsAndHashCode = generatePojosEqualsAndHashCode;
}
+ @Override
+ public boolean generatePojosToString() {
+ return generatePojosToString;
+ }
+
+ @Override
+ public void setGeneratePojosToString(boolean generatePojosToString) {
+ this.generatePojosToString = generatePojosToString;
+ }
+
@Override
public String fullyQualifiedTypes() {
return fullyQualifiedTypes;
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 b08b1465df..0f657f6f7c 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/GenerationTool.java
@@ -412,6 +412,8 @@ public class GenerationTool {
generator.setFluentSetters(g.getGenerate().isFluentSetters());
if (g.getGenerate().isPojosEqualsAndHashCode() != null)
generator.setGeneratePojosEqualsAndHashCode(g.getGenerate().isPojosEqualsAndHashCode());
+ if (g.getGenerate().isPojosToString() != null)
+ generator.setGeneratePojosToString(g.getGenerate().isPojosToString());
if (g.getGenerate().getFullyQualifiedTypes() != null)
generator.setFullyQualifiedTypes(g.getGenerate().getFullyQualifiedTypes());
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 a7f613ec75..ab28bc449e 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/Generator.java
@@ -255,15 +255,27 @@ public interface Generator {
void setFluentSetters(boolean fluentSetters);
/**
- * Whether equals and hashCode methods should be generated on POJOs
+ * Whether equals() and hashCode() methods should
+ * be generated on POJOs
*/
boolean generatePojosEqualsAndHashCode();
/**
- * Whether equals and hashCode methods should be generated on POJOs
+ * Whether equals() and hashCode() methods should
+ * be generated on POJOs
*/
void setGeneratePojosEqualsAndHashCode(boolean generatePojosEqualsAndHashCode);
+ /**
+ * Whether a toString() method should be generated on POJOs
+ */
+ boolean generatePojosToString();
+
+ /**
+ * Whether a toString() method should be generated on POJOs
+ */
+ void setGeneratePojosToString(boolean generatePojosToString);
+
/**
* A regular expression matching all the types in generated code that should
* be fully qualified.
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 15d687a5b9..85a318bde8 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/util/JavaGenerator.java
@@ -2566,6 +2566,9 @@ public class JavaGenerator extends AbstractGenerator {
generatePojoEqualsAndHashCode(tableOrUDT, out);
}
+ if (generatePojosToString()) {
+ generatePojoToString(tableOrUDT, out);
+ }
if (generateInterfaces() && !generateImmutablePojos()) {
printFromAndInto(out, tableOrUDT);
@@ -2694,6 +2697,70 @@ public class JavaGenerator extends AbstractGenerator {
}
}
+ protected void generatePojoToString(Definition tableOrUDT, JavaWriter out) {
+ final String className = getStrategy().getJavaClassName(tableOrUDT, Mode.POJO);
+
+ out.println();
+
+ if (scala) {
+ out.tab(1).println("override def toString : String = {");
+
+ out.tab(2).println("val sb = new %s(\"%s (\")", StringBuilder.class, className);
+ out.tab(2).println();
+
+ String separator = "";
+ for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
+ final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
+ final String columnType = getJavaType(column.getType());
+
+ if (columnType.equals("Array[scala.Byte]")) {
+ out.tab(2).println("sb%s.append(\"[binary...]\")", separator);
+ }
+ else {
+ out.tab(2).println("sb%s.append(%s)", separator, columnMember);
+ }
+
+ separator = ".append(\", \")";
+ }
+
+ out.tab(2).println();
+ out.tab(2).println("sb.append(\")\");");
+
+ out.tab(2).println("return sb.toString");
+ out.tab(1).println("}");
+ }
+ else {
+ out.tab(1).println("@Override");
+ out.tab(1).println("public String toString() {");
+ out.tab(2).println("%s sb = new %s(\"%s (\");", StringBuilder.class, StringBuilder.class, className);
+ out.tab(2).println();
+
+ String separator = "";
+ for (TypedElementDefinition> column : getTypedElements(tableOrUDT)) {
+ final String columnMember = getStrategy().getJavaMemberName(column, Mode.POJO);
+ final String columnType = getJavaType(column.getType());
+ final boolean array = columnType.endsWith("[]");
+
+ if (array && columnType.equals("byte[]")) {
+ out.tab(2).println("sb%s.append(\"[binary...]\");", separator);
+ }
+ else if (array) {
+ out.tab(2).println("sb%s.append(%s.toString(%s));", separator, Arrays.class, columnMember);
+ }
+ else {
+ out.tab(2).println("sb%s.append(%s);", separator, columnMember);
+ }
+
+ separator = ".append(\", \")";
+ }
+
+ out.tab(2).println();
+ out.tab(2).println("sb.append(\")\");");
+ out.tab(2).println("return sb.toString();");
+ out.tab(1).println("}");
+ }
+ }
+
private List extends TypedElementDefinition extends Definition>> getTypedElements(Definition definition) {
if (definition instanceof TableDefinition) {
return ((TableDefinition) definition).getColumns();
diff --git a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd
index d940e8f73c..6f30161b5b 100644
--- a/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd
+++ b/jOOQ-meta/src/main/resources/xsd/jooq-codegen-3.7.0.xsd
@@ -658,6 +658,11 @@
-->
+
+
+