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 a007f5c04e..7576f962a1 100644 --- a/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java +++ b/jOOQ-codegen/src/main/java/org/jooq/codegen/JavaGenerator.java @@ -5298,7 +5298,8 @@ public class JavaGenerator extends AbstractGenerator { protected void generateEmbeddables(SchemaDefinition schema) { log.info("Generating embeddables"); - for (EmbeddableDefinition embeddable : database.getEmbeddables(schema)) { + // [#6124] Prevent FKs from overriding PK embeddable + for (EmbeddableDefinition embeddable : new LinkedHashSet<>(database.getEmbeddables(schema))) { try { // [#6124] [#10481] Don't generate embeddable types for FKs diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultEmbeddableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultEmbeddableDefinition.java index 096029bc27..d2df102298 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/DefaultEmbeddableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/DefaultEmbeddableDefinition.java @@ -142,6 +142,25 @@ public class DefaultEmbeddableDefinition return getElement(columnIndex); } + @Override + public final EmbeddableColumnDefinition getReferencingColumn(String columnName) { + return getReferencingColumn(columnName, false); + } + + @Override + public final EmbeddableColumnDefinition getReferencingColumn(String columnName, boolean ignoreCase) { + if (columnName == null) + return null; + + for (EmbeddableColumnDefinition column : getColumns()) + if ((ignoreCase && column.getReferencingColumn().getName().equalsIgnoreCase(columnName)) || + (!ignoreCase && column.getReferencingColumn().getName().equals(columnName))) + + return column; + + return null; + } + @Override public final boolean replacesFields() { return replacesFields; diff --git a/jOOQ-meta/src/main/java/org/jooq/meta/EmbeddableDefinition.java b/jOOQ-meta/src/main/java/org/jooq/meta/EmbeddableDefinition.java index ba5d64c7a2..6238c6b6ed 100644 --- a/jOOQ-meta/src/main/java/org/jooq/meta/EmbeddableDefinition.java +++ b/jOOQ-meta/src/main/java/org/jooq/meta/EmbeddableDefinition.java @@ -76,25 +76,35 @@ public interface EmbeddableDefinition extends TableElementDefinition { TableDefinition getReferencingTable(); /** - * All referencing columns in the type, table or view. + * All defining columns in the type, table or view. */ List getColumns(); /** - * Get a referencing column in this type by its name. + * Get a defining column in this type by its name. */ EmbeddableColumnDefinition getColumn(String columnName); /** - * Get a referencing column in this type by its name. + * Get a defining column in this type by its name. */ EmbeddableColumnDefinition getColumn(String columnName, boolean ignoreCase); /** - * Get a referencing column in this type by its index (starting at 0). + * Get a defining column in this type by its index (starting at 0). */ EmbeddableColumnDefinition getColumn(int columnIndex); + /** + * Get a referencing column in this type by its referencing name. + */ + EmbeddableColumnDefinition getReferencingColumn(String columnName); + + /** + * Get a referencing column in this type by its referencing name. + */ + EmbeddableColumnDefinition getReferencingColumn(String columnName, boolean ignoreCase); + /** * Whether this embeddable replaces the fields it represents. */