From 0b7b52eca0a9f411a19164ba5f229e1b463c0a50 Mon Sep 17 00:00:00 2001 From: Christina Braun <11138584+chrstnbrn@users.noreply.github.com> Date: Wed, 8 Nov 2023 15:14:26 +0100 Subject: [PATCH] use unique name for backing index of unique constraints (#555) * use unique name for backing index of unique constraints * There may be edge cases where the index name could be null, so in this case we still using the table name + random identifier. --------- Co-authored-by: filipe --- .../snapshot/UniqueConstraintSnapshotGenerator.java | 6 +++++- src/test/java/com/example/ejb3/auction/Item.java | 6 ++++++ .../ext/hibernate/SpringPackageScanningIntegrationTest.java | 1 + 3 files changed, 12 insertions(+), 1 deletion(-) diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java index 2e0aa74b..03dd08dc 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java @@ -117,7 +117,11 @@ protected Index getBackingIndex(UniqueConstraint uniqueConstraint, org.hibernate index.setRelation(uniqueConstraint.getRelation()); index.setColumns(uniqueConstraint.getColumns()); index.setUnique(true); - index.setName(String.format("%s_%s_IX",hibernateTable.getName(), StringUtil.randomIdentifer(4))); + if (StringUtil.isNotEmpty(uniqueConstraint.getName())) { + index.setName(uniqueConstraint.getName() + "_IX"); + } else { + index.setName(String.format("%s_%s_IX",hibernateTable.getName(), StringUtil.randomIdentifer(4))); + } return index; } diff --git a/src/test/java/com/example/ejb3/auction/Item.java b/src/test/java/com/example/ejb3/auction/Item.java index f7f6f158..1f0a5971 100644 --- a/src/test/java/com/example/ejb3/auction/Item.java +++ b/src/test/java/com/example/ejb3/auction/Item.java @@ -12,6 +12,9 @@ public class Item { @Column(unique = true) private String name; + @Column(unique = true) + private String key; + public long getId() { return id; } @@ -28,4 +31,7 @@ public void setName(String name) { this.name = name; } + public String getKey() { return key; } + + public void setKey(String key) { this.key = key; } } diff --git a/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java b/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java index a953ebf3..79c4088a 100644 --- a/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java +++ b/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java @@ -124,6 +124,7 @@ public void runGeneratedChangeLog() throws Exception { assertEquals(differences, 0, diffResult.getMissingObjects().size()); assertEquals(differences, 0, diffResult.getUnexpectedObjects().size()); + assertEquals(differences, 0, diffResult.getChangedObjects(UniqueConstraint.class).size()); // assertEquals(differences, 0, diffResult.getChangedObjects().size()); //unimportant differences in schema name and datatypes causing test to fail }