diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java
index 418cf0a104..289aeb69fb 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/AbstractGenerator.java
@@ -112,6 +112,7 @@ abstract class AbstractGenerator implements Generator {
boolean generatePojosAsScalaCaseClasses = true;
boolean generatePojosAsKotlinDataClasses = true;
boolean generatePojosEqualsAndHashCode = true;
+ boolean generatePojosEqualsAndHashCodePrimaryKeyOnly = false;
String generatePojosEqualsAndHashCodeColumnIncludeExpression = null;
String generatePojosEqualsAndHashCodeColumnExcludeExpression = null;
boolean generatePojosToString = true;
@@ -1401,6 +1402,16 @@ abstract class AbstractGenerator implements Generator {
this.generatePojosEqualsAndHashCode = generatePojosEqualsAndHashCode;
}
+ @Override
+ public boolean generatePojosEqualsAndHashCodePrimaryKeyOnly() {
+ return generatePojosEqualsAndHashCodePrimaryKeyOnly;
+ }
+
+ @Override
+ public void setGeneratePojosEqualsAndHashCodePrimaryKeyOnly(boolean generatePojosEqualsAndHashCodePrimaryKeyOnly) {
+ this.generatePojosEqualsAndHashCodePrimaryKeyOnly = generatePojosEqualsAndHashCodePrimaryKeyOnly;
+ }
+
@Override
public String generatePojosEqualsAndHashCodeColumnIncludeExpression() {
return generatePojosEqualsAndHashCodeColumnIncludeExpression;
diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
index d1b235ad1f..5b41a7c85c 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/GenerationTool.java
@@ -954,6 +954,8 @@ public class GenerationTool {
generator.setGenerateVarargsSetters(g.getGenerate().isVarargSetters());
if (g.getGenerate().isPojosEqualsAndHashCode() != null)
generator.setGeneratePojosEqualsAndHashCode(g.getGenerate().isPojosEqualsAndHashCode());
+ if (g.getGenerate().isPojosEqualsAndHashCodeIncludePrimaryKeyOnly() != null)
+ generator.setGeneratePojosEqualsAndHashCodePrimaryKeyOnly(g.getGenerate().isPojosEqualsAndHashCodeIncludePrimaryKeyOnly());
if (g.getGenerate().getPojosEqualsAndHashCodeColumnIncludeExpression() != null)
generator.setGeneratePojosEqualsAndHashCodeColumnIncludeExpression(g.getGenerate().getPojosEqualsAndHashCodeColumnIncludeExpression());
if (g.getGenerate().getPojosEqualsAndHashCodeColumnExcludeExpression() != null)
diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java
index f22277d0a8..5a1ea73b1c 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/Generator.java
@@ -1290,6 +1290,18 @@ public interface Generator {
*/
void setGeneratePojosEqualsAndHashCode(boolean generatePojosEqualsAndHashCode);
+ /**
+ * Whether the equals() and hashCode() methods be
+ * generated on POJOs should include primary key columns only.
+ */
+ boolean generatePojosEqualsAndHashCodePrimaryKeyOnly();
+
+ /**
+ * Whether the equals() and hashCode() methods be
+ * generated on POJOs should include primary key columns only.
+ */
+ void setGeneratePojosEqualsAndHashCodePrimaryKeyOnly(boolean generatePojosEqualsAndHashCodePrimaryKeyOnly);
+
/**
* A regular expression matching columns to include in equals()
* and hashCode() methods of generated POJOS.
diff --git a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
index db2edbd831..8105d45612 100644
--- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
+++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java
@@ -6836,14 +6836,25 @@ public class JavaGenerator extends AbstractGenerator {
final String className = getStrategy().getJavaClassName(tableUdtOrEmbeddable, Mode.POJO);
List replacingEmbeddablesAndUnreplacedColumns = replacingEmbeddablesAndUnreplacedColumns(tableUdtOrEmbeddable);
- if (generatePojosEqualsAndHashCodeColumnIncludeExpression() != null ||
- generatePojosEqualsAndHashCodeColumnExcludeExpression() != null)
+ // [#17487] Include / exclude specific columns, if requested
+ if (!isEmpty(generatePojosEqualsAndHashCodeColumnIncludeExpression()) ||
+ !isEmpty(generatePojosEqualsAndHashCodeColumnExcludeExpression()))
replacingEmbeddablesAndUnreplacedColumns = database.filterExcludeInclude(
replacingEmbeddablesAndUnreplacedColumns,
generatePojosEqualsAndHashCodeColumnExcludeExpression(),
generatePojosEqualsAndHashCodeColumnIncludeExpression()
);
+ // [#8705] Retain only primary key columns, if requested
+ if (generatePojosEqualsAndHashCodePrimaryKeyOnly()) {
+ if (tableUdtOrEmbeddable instanceof TableDefinition t) {
+ UniqueKeyDefinition pk = t.getPrimaryKey();
+
+ if (pk != null)
+ replacingEmbeddablesAndUnreplacedColumns.retainAll(pk.getKeyColumns());
+ }
+ }
+
out.println();
if (scala) {
diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java
index 6900912a93..12489e49f1 100644
--- a/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java
+++ b/jOOQ-meta/src/main/java/org/jooq/meta/jaxb/Generate.java
@@ -116,6 +116,8 @@ public class Generate implements Serializable, XMLAppendable
protected Boolean pojos = false;
@XmlElement(defaultValue = "true")
protected Boolean pojosEqualsAndHashCode = true;
+ @XmlElement(defaultValue = "true")
+ protected Boolean pojosEqualsAndHashCodeIncludePrimaryKeyOnly = true;
@XmlElement(defaultValue = "")
@XmlJavaTypeAdapter(StringAdapter.class)
protected String pojosEqualsAndHashCodeColumnIncludeExpression = "";
@@ -1298,7 +1300,31 @@ public class Generate implements Serializable, XMLAppendable
}
/**
- * The regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.
+ * Include primary key columns only in generated equals() and hashCode() methods in POJOs.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isPojosEqualsAndHashCodeIncludePrimaryKeyOnly() {
+ return pojosEqualsAndHashCodeIncludePrimaryKeyOnly;
+ }
+
+ /**
+ * Include primary key columns only in generated equals() and hashCode() methods in POJOs.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setPojosEqualsAndHashCodeIncludePrimaryKeyOnly(Boolean value) {
+ this.pojosEqualsAndHashCodeIncludePrimaryKeyOnly = value;
+ }
+
+ /**
+ * A regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.
*
*/
public String getPojosEqualsAndHashCodeColumnIncludeExpression() {
@@ -1306,7 +1332,7 @@ public class Generate implements Serializable, XMLAppendable
}
/**
- * The regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.
+ * A regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.
*
*/
public void setPojosEqualsAndHashCodeColumnIncludeExpression(String value) {
@@ -1314,7 +1340,7 @@ public class Generate implements Serializable, XMLAppendable
}
/**
- * The regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.
+ * A regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.
*
*/
public String getPojosEqualsAndHashCodeColumnExcludeExpression() {
@@ -1322,7 +1348,7 @@ public class Generate implements Serializable, XMLAppendable
}
/**
- * The regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.
+ * A regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.
*
*/
public void setPojosEqualsAndHashCodeColumnExcludeExpression(String value) {
@@ -3689,7 +3715,16 @@ public class Generate implements Serializable, XMLAppendable
}
/**
- * The regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.
+ * Include primary key columns only in generated equals() and hashCode() methods in POJOs.
+ *
+ */
+ public Generate withPojosEqualsAndHashCodeIncludePrimaryKeyOnly(Boolean value) {
+ setPojosEqualsAndHashCodeIncludePrimaryKeyOnly(value);
+ return this;
+ }
+
+ /**
+ * A regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.
*
*/
public Generate withPojosEqualsAndHashCodeColumnIncludeExpression(String value) {
@@ -3698,7 +3733,7 @@ public class Generate implements Serializable, XMLAppendable
}
/**
- * The regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.
+ * A regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.
*
*/
public Generate withPojosEqualsAndHashCodeColumnExcludeExpression(String value) {
@@ -4520,6 +4555,7 @@ public class Generate implements Serializable, XMLAppendable
builder.append("enumsAsScalaEnums", enumsAsScalaEnums);
builder.append("pojos", pojos);
builder.append("pojosEqualsAndHashCode", pojosEqualsAndHashCode);
+ builder.append("pojosEqualsAndHashCodeIncludePrimaryKeyOnly", pojosEqualsAndHashCodeIncludePrimaryKeyOnly);
builder.append("pojosEqualsAndHashCodeColumnIncludeExpression", pojosEqualsAndHashCodeColumnIncludeExpression);
builder.append("pojosEqualsAndHashCodeColumnExcludeExpression", pojosEqualsAndHashCodeColumnExcludeExpression);
builder.append("pojosToString", pojosToString);
@@ -5003,6 +5039,15 @@ public class Generate implements Serializable, XMLAppendable
return false;
}
}
+ if (pojosEqualsAndHashCodeIncludePrimaryKeyOnly == null) {
+ if (other.pojosEqualsAndHashCodeIncludePrimaryKeyOnly!= null) {
+ return false;
+ }
+ } else {
+ if (!pojosEqualsAndHashCodeIncludePrimaryKeyOnly.equals(other.pojosEqualsAndHashCodeIncludePrimaryKeyOnly)) {
+ return false;
+ }
+ }
if (pojosEqualsAndHashCodeColumnIncludeExpression == null) {
if (other.pojosEqualsAndHashCodeColumnIncludeExpression!= null) {
return false;
@@ -5808,6 +5853,7 @@ public class Generate implements Serializable, XMLAppendable
result = ((prime*result)+((enumsAsScalaEnums == null)? 0 :enumsAsScalaEnums.hashCode()));
result = ((prime*result)+((pojos == null)? 0 :pojos.hashCode()));
result = ((prime*result)+((pojosEqualsAndHashCode == null)? 0 :pojosEqualsAndHashCode.hashCode()));
+ result = ((prime*result)+((pojosEqualsAndHashCodeIncludePrimaryKeyOnly == null)? 0 :pojosEqualsAndHashCodeIncludePrimaryKeyOnly.hashCode()));
result = ((prime*result)+((pojosEqualsAndHashCodeColumnIncludeExpression == null)? 0 :pojosEqualsAndHashCodeColumnIncludeExpression.hashCode()));
result = ((prime*result)+((pojosEqualsAndHashCodeColumnExcludeExpression == null)? 0 :pojosEqualsAndHashCodeColumnExcludeExpression.hashCode()));
result = ((prime*result)+((pojosToString == null)? 0 :pojosToString.hashCode()));
diff --git a/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.20.0.xsd b/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.20.0.xsd
index 71830b850e..20aff6c4da 100644
--- a/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.20.0.xsd
+++ b/jOOQ-meta/src/main/resources/org/jooq/meta/xsd/jooq-codegen-3.20.0.xsd
@@ -2723,12 +2723,16 @@ jOOQ API, without adding custom data type bindings to them.]]>
+
+
+
+
-
+
-
+