[jOOQ/jOOQ#8705] Add code generation configuration to generate primary key based equals() and hashCode() on POJOs
This commit is contained in:
parent
4a88729447
commit
63b3051f7b
@ -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;
|
||||
|
||||
@ -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)
|
||||
|
||||
@ -1290,6 +1290,18 @@ public interface Generator {
|
||||
*/
|
||||
void setGeneratePojosEqualsAndHashCode(boolean generatePojosEqualsAndHashCode);
|
||||
|
||||
/**
|
||||
* Whether the <code>equals()</code> and <code>hashCode()</code> methods be
|
||||
* generated on POJOs should include primary key columns only.
|
||||
*/
|
||||
boolean generatePojosEqualsAndHashCodePrimaryKeyOnly();
|
||||
|
||||
/**
|
||||
* Whether the <code>equals()</code> and <code>hashCode()</code> methods be
|
||||
* generated on POJOs should include primary key columns only.
|
||||
*/
|
||||
void setGeneratePojosEqualsAndHashCodePrimaryKeyOnly(boolean generatePojosEqualsAndHashCodePrimaryKeyOnly);
|
||||
|
||||
/**
|
||||
* A regular expression matching columns to include in <code>equals()</code>
|
||||
* and <code>hashCode()</code> methods of generated POJOS.
|
||||
|
||||
@ -6836,14 +6836,25 @@ public class JavaGenerator extends AbstractGenerator {
|
||||
final String className = getStrategy().getJavaClassName(tableUdtOrEmbeddable, Mode.POJO);
|
||||
List<Definition> 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) {
|
||||
|
||||
@ -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()));
|
||||
|
||||
@ -2723,12 +2723,16 @@ jOOQ API, without adding custom data type bindings to them.]]></jxb:javadoc></jx
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Generate basic equals() and hashCode() methods in POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="pojosEqualsAndHashCodeIncludePrimaryKeyOnly" type="boolean" default="true" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[Include primary key columns only in generated equals() and hashCode() methods in POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="pojosEqualsAndHashCodeColumnIncludeExpression" type="string" default="" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A regular expression matching columns for inclusion in generated equals() and hashCode() methods in POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="pojosEqualsAndHashCodeColumnExcludeExpression" type="string" default="" minOccurs="0" maxOccurs="1">
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[The regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
<annotation><appinfo><jxb:property><jxb:javadoc><![CDATA[A regular expression matching columns for exclusion in generated equals() and hashCode() methods in POJOs.]]></jxb:javadoc></jxb:property></appinfo></annotation>
|
||||
</element>
|
||||
|
||||
<element name="pojosToString" type="boolean" default="true" minOccurs="0" maxOccurs="1">
|
||||
|
||||
Loading…
Reference in New Issue
Block a user