From 342c836d388c344975753a7f2789a160eb5f1661 Mon Sep 17 00:00:00 2001 From: filipe Date: Wed, 19 Jul 2023 10:19:59 -0300 Subject: [PATCH 01/12] Switch to new Hibernate 6.2 Generator API --- .../hibernate/snapshot/TableSnapshotGenerator.java | 11 +++++------ .../extension/TableGeneratorSnapshotGenerator.java | 8 ++++---- 2 files changed, 9 insertions(+), 10 deletions(-) diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java index a84c099f..29e875fb 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java @@ -11,7 +11,7 @@ import liquibase.structure.core.Schema; import liquibase.structure.core.Table; import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.id.IdentifierGenerator; +import org.hibernate.generator.Generator; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.RootClass; @@ -22,7 +22,7 @@ public class TableSnapshotGenerator extends HibernateSnapshotGenerator { - private List> tableIdGenerators = new ArrayList>(); + private List> tableIdGenerators = new ArrayList<>(); public TableSnapshotGenerator() { super(Table.class, new Class[]{Schema.class}); @@ -78,15 +78,14 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro Iterator classMappings = entityBindings.iterator(); while (classMappings.hasNext()) { - PersistentClass persistentClass = (PersistentClass) classMappings - .next(); + PersistentClass persistentClass = classMappings.next(); if (!persistentClass.isInherited()) { - IdentifierGenerator ig = persistentClass.getIdentifier().createIdentifierGenerator( + Generator ig = persistentClass.getIdentifier().createGenerator( metadata.getMetadataBuildingOptions().getIdentifierGeneratorFactory(), database.getDialect(), (RootClass) persistentClass ); - for (ExtendedSnapshotGenerator tableIdGenerator : tableIdGenerators) { + for (ExtendedSnapshotGenerator tableIdGenerator : tableIdGenerators) { if (tableIdGenerator.supports(ig)) { Table idTable = tableIdGenerator.snapshot(ig); idTable.setSchema(schema); diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/extension/TableGeneratorSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/extension/TableGeneratorSnapshotGenerator.java index 73be29cb..2ae42255 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/extension/TableGeneratorSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/extension/TableGeneratorSnapshotGenerator.java @@ -4,16 +4,16 @@ import liquibase.structure.core.DataType; import liquibase.structure.core.PrimaryKey; import liquibase.structure.core.Table; -import org.hibernate.id.IdentifierGenerator; +import org.hibernate.generator.Generator; import org.hibernate.id.enhanced.TableGenerator; -public class TableGeneratorSnapshotGenerator implements ExtendedSnapshotGenerator { +public class TableGeneratorSnapshotGenerator implements ExtendedSnapshotGenerator { private static final String PK_DATA_TYPE = "varchar"; private static final String VALUE_DATA_TYPE = "bigint"; @Override - public Table snapshot(IdentifierGenerator ig) { + public Table snapshot(Generator ig) { TableGenerator tableGenerator = (TableGenerator) ig; Table table = new Table().setName(tableGenerator.getTableName()); @@ -44,7 +44,7 @@ public Table snapshot(IdentifierGenerator ig) { } @Override - public boolean supports(IdentifierGenerator ig) { + public boolean supports(Generator ig) { return ig instanceof TableGenerator; } From 801d00b20be449d64c0aa4b2fe11df9e0a56d562 Mon Sep 17 00:00:00 2001 From: filipe Date: Wed, 19 Jul 2023 10:26:56 -0300 Subject: [PATCH 02/12] Test against Hibernate 6.2 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1cb904eb..7d349f2b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -106,7 +106,7 @@ jobs: strategy: fail-fast: false matrix: - hibernate: [ "6.0.2.Final", "6.1.7.Final" ] + hibernate: [ "6.2.6.Final" ] steps: - uses: actions/checkout@v2 From 92b3b91cc65144b75a5960f03555d76338b5eee8 Mon Sep 17 00:00:00 2001 From: filipe Date: Thu, 20 Jul 2023 17:01:43 -0300 Subject: [PATCH 03/12] Fix tests matrix --- .github/workflows/ci.yml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1888adc1..5b1b20fd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -106,7 +106,7 @@ jobs: strategy: fail-fast: false matrix: - hibernate: [ "6.2.6.Final" ] + hibernate: [ "6.0.2.Final", "6.1.7.Final" ] steps: - uses: actions/checkout@v2 diff --git a/pom.xml b/pom.xml index 37480bd3..9e3aa388 100644 --- a/pom.xml +++ b/pom.xml @@ -69,7 +69,7 @@ UTF-8 - 6.1.7.Final + 6.2.6.Final 6.0.11 0-SNAPSHOT From 41d178158a980bcb541f8f2f86e94b3716e7320f Mon Sep 17 00:00:00 2001 From: filipe Date: Thu, 20 Jul 2023 17:15:30 -0300 Subject: [PATCH 04/12] Fix tests matrix --- .github/workflows/ci.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5b1b20fd..a604b315 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -98,6 +98,7 @@ jobs: **/target/surefire-reports **/target/jacoco.exec + hibernate-test: name: Test Hibernate ${{ matrix.hibernate }} needs: build From 47b3e708176691c2ec2d518af0ec1a170cd2d152 Mon Sep 17 00:00:00 2001 From: filipe Date: Mon, 31 Jul 2023 13:43:02 -0300 Subject: [PATCH 05/12] remove empty line. --- .github/workflows/test.yml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 1142b8fd..b5235658 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -88,7 +88,6 @@ jobs: **/target/surefire-reports **/target/jacoco.exec - hibernate-test: name: Test Hibernate ${{ matrix.hibernate }} needs: build @@ -126,4 +125,4 @@ jobs: dependabot: uses: liquibase/build-logic/.github/workflows/dependabot-automerge.yml@main - secrets: inherit \ No newline at end of file + secrets: inherit From 838ca9dc075902ec4b0a3ddaff71f57e597e825f Mon Sep 17 00:00:00 2001 From: filipe Date: Wed, 13 Sep 2023 09:34:34 -0300 Subject: [PATCH 06/12] Hibernate 6.3.0 --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index ee9a1a73..527bf9ed 100644 --- a/pom.xml +++ b/pom.xml @@ -68,7 +68,7 @@ UTF-8 - 6.2.6.Final + 6.3.0.Final 6.0.11 4.23.0 @@ -483,4 +483,4 @@ - \ No newline at end of file + From 5588576d949e5503aff97d3deb03298845350404 Mon Sep 17 00:00:00 2001 From: filipe Date: Wed, 20 Sep 2023 14:21:28 -0300 Subject: [PATCH 07/12] Supports Hibernate 6.2.x and 6.3.x --- .github/workflows/test.yml | 4 ++-- pom.xml | 21 ++---------------- .../snapshot/IndexSnapshotGenerator.java | 22 +++++++------------ .../UniqueConstraintSnapshotGenerator.java | 21 +++++------------- .../SpringPackageScanningIntegrationTest.java | 22 +++++++++---------- 5 files changed, 28 insertions(+), 62 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index fa7e5f0b..c6ce5625 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,7 +60,7 @@ jobs: strategy: fail-fast: false matrix: - java: [ 17, 19 ] + java: [ 17, 21 ] steps: - uses: actions/checkout@v4 @@ -100,7 +100,7 @@ jobs: strategy: fail-fast: false matrix: - hibernate: [ "6.0.2.Final", "6.1.7.Final" ] + hibernate: [ "6.0.2.Final", "6.1.7.Final", "6.2.7.Final", "6.3.1.Final" ] steps: - uses: actions/checkout@v4 diff --git a/pom.xml b/pom.xml index 4459353e..8268b70c 100644 --- a/pom.xml +++ b/pom.xml @@ -68,7 +68,7 @@ UTF-8 - 6.3.0.Final + 6.3.1.Final 6.0.12 4.23.2 @@ -226,23 +226,6 @@ build-helper-maven-plugin 3.4.0 - - - - - - - - - - - - - - - - - org.apache.maven.plugins maven-enforcer-plugin @@ -256,7 +239,7 @@ - 1.8 + 11 diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java index cca4d72a..1bf59a7e 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java @@ -7,7 +7,7 @@ import liquibase.structure.DatabaseObject; import liquibase.structure.core.*; -import java.util.Iterator; +import java.util.Map; public class IndexSnapshotGenerator extends HibernateSnapshotGenerator { @@ -29,16 +29,13 @@ protected DatabaseObject snapshotObject(DatabaseObject example, DatabaseSnapshot if (hibernateTable == null) { return example; } - Iterator indexIterator = hibernateTable.getIndexIterator(); - while (indexIterator.hasNext()) { - org.hibernate.mapping.Index hibernateIndex = indexIterator.next(); + Map indexes = hibernateTable.getIndexes(); + for (org.hibernate.mapping.Index hibernateIndex : indexes.values()) { Index index = new Index(); index.setRelation(table); index.setName(hibernateIndex.getName()); index.setUnique(isUniqueIndex(hibernateIndex)); - Iterator columnIterator = hibernateIndex.getColumnIterator(); - while (columnIterator.hasNext()) { - org.hibernate.mapping.Column hibernateColumn = columnIterator.next(); + for (var hibernateColumn : hibernateIndex.getColumns()) { String hibernateOrder = hibernateIndex.getColumnOrderMap().get(hibernateColumn); Boolean descending = HIBERNATE_ORDER_ASC.equals(hibernateOrder) ? Boolean.FALSE @@ -67,16 +64,13 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro if (hibernateTable == null) { return; } - Iterator indexIterator = hibernateTable.getIndexIterator(); - while (indexIterator.hasNext()) { - org.hibernate.mapping.Index hibernateIndex = indexIterator.next(); + for (var hibernateIndex : hibernateTable.getIndexes().values()) { Index index = new Index(); index.setRelation(table); index.setName(hibernateIndex.getName()); index.setUnique(isUniqueIndex(hibernateIndex)); - Iterator columnIterator = hibernateIndex.getColumnIterator(); - while (columnIterator.hasNext()) { - org.hibernate.mapping.Column hibernateColumn = columnIterator.next(); + + for (var hibernateColumn : hibernateIndex.getColumns()) { String hibernateOrder = hibernateIndex.getColumnOrderMap().get(hibernateColumn); Boolean descending = HIBERNATE_ORDER_ASC.equals(hibernateOrder) ? Boolean.FALSE @@ -95,7 +89,7 @@ private Boolean isUniqueIndex(org.hibernate.mapping.Index hibernateIndex) { actual diff in certain non-unique indexes */ if (hibernateIndex.getColumnSpan() == 1) { - org.hibernate.mapping.Column col = hibernateIndex.getColumnIterator().next(); + var col = hibernateIndex.getColumns().get(0); return col.isUnique(); } else { /* diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java index 2e0aa74b..f1cd4b44 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/UniqueConstraintSnapshotGenerator.java @@ -40,20 +40,15 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro if (hibernateTable == null) { return; } - Iterator uniqueIterator = hibernateTable.getUniqueKeyIterator(); - while (uniqueIterator.hasNext()) { - org.hibernate.mapping.UniqueKey hibernateUnique = (org.hibernate.mapping.UniqueKey) uniqueIterator.next(); - + for (var hibernateUnique : hibernateTable.getUniqueKeys().values()) { UniqueConstraint uniqueConstraint = new UniqueConstraint(); uniqueConstraint.setName(hibernateUnique.getName()); uniqueConstraint.setRelation(table); uniqueConstraint.setClustered(false); // No way to set true via Hibernate - Iterator columnIterator = hibernateUnique.getColumnIterator(); + int i = 0; - while (columnIterator.hasNext()) { - org.hibernate.mapping.Column hibernateColumn = (org.hibernate.mapping.Column) columnIterator.next(); - uniqueConstraint.addColumn(i, new Column(hibernateColumn.getName()).setRelation(table)); - i++; + for (var hibernateColumn : hibernateUnique.getColumns()) { + uniqueConstraint.addColumn(i++, new Column(hibernateColumn.getName()).setRelation(table)); } Index index = getBackingIndex(uniqueConstraint, hibernateTable, snapshot); @@ -62,9 +57,7 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro Scope.getCurrentScope().getLog(getClass()).info("Found unique constraint " + uniqueConstraint.toString()); table.getUniqueConstraints().add(uniqueConstraint); } - Iterator columnIterator = hibernateTable.getColumnIterator(); - while (columnIterator.hasNext()) { - org.hibernate.mapping.Column column = (org.hibernate.mapping.Column) columnIterator.next(); + for (var column : hibernateTable.getColumns()) { if (column.isUnique()) { UniqueConstraint uniqueConstraint = new UniqueConstraint(); uniqueConstraint.setRelation(table); @@ -84,9 +77,7 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro } } - Iterator ucIter = table.getUniqueConstraints().iterator(); - while (ucIter.hasNext()) { - UniqueConstraint uc = ucIter.next(); + for (UniqueConstraint uc : table.getUniqueConstraints()) { if (uc.getName() == null || uc.getName().isEmpty()) { String name = table.getName() + uc.getColumnNames(); name = "UCIDX" + hashedName(name); diff --git a/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java b/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java index 9089e5c3..3a67e807 100644 --- a/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java +++ b/src/test/java/liquibase/ext/hibernate/SpringPackageScanningIntegrationTest.java @@ -26,6 +26,7 @@ import org.junit.Test; import java.io.*; +import java.nio.charset.StandardCharsets; import java.sql.Connection; import java.sql.DriverManager; import java.util.HashSet; @@ -34,8 +35,7 @@ import java.util.Map.Entry; import java.util.Set; -import static junit.framework.TestCase.assertEquals; -import static junit.framework.TestCase.assertTrue; +import static junit.framework.TestCase.*; public class SpringPackageScanningIntegrationTest { private static final String PACKAGES = "com.example.ejb3.auction"; @@ -52,7 +52,7 @@ public void setUp() throws Exception { database = new HsqlDatabase(); database.setConnection(new JdbcConnection(connection)); - Set> typesToInclude = new HashSet>(); + Set> typesToInclude = new HashSet<>(); typesToInclude.add(Table.class); typesToInclude.add(Column.class); typesToInclude.add(PrimaryKey.class); @@ -95,16 +95,14 @@ public void runGeneratedChangeLog() throws Exception { DiffResult diffResult = liquibase.diff(hibernateDatabase, database, compareControl); boolean isTablePrefixWithZZ_ = diffResult.getMissingObjects().stream() - .filter(e -> e.getName().equals("zz_AuditedItem_AUD")) - .findAny() - .isPresent(); + .anyMatch(e -> e.getName().equals("zz_AuditedItem_AUD")); assertTrue(isTablePrefixWithZZ_); - assertTrue(diffResult.getMissingObjects().size() > 0); + assertFalse(diffResult.getMissingObjects().isEmpty()); File outFile = File.createTempFile("lb-test", ".xml"); OutputStream outChangeLog = new FileOutputStream(outFile); String changeLogString = toChangeLog(diffResult); - outChangeLog.write(changeLogString.getBytes("UTF-8")); + outChangeLog.write(changeLogString.getBytes(StandardCharsets.UTF_8)); outChangeLog.close(); Scope.getCurrentScope().getLog(getClass()).info("Changelog:\n" + changeLogString); @@ -287,21 +285,21 @@ private void hibernateSchemaExport(boolean enhancedId) throws Exception { private String toString(DiffResult diffResult) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrintStream printStream = new PrintStream(out, true, "UTF-8"); + PrintStream printStream = new PrintStream(out, true, StandardCharsets.UTF_8); DiffToReport diffToReport = new DiffToReport(diffResult, printStream); diffToReport.print(); printStream.close(); - return out.toString("UTF-8"); + return out.toString(StandardCharsets.UTF_8); } private String toChangeLog(DiffResult diffResult) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); - PrintStream printStream = new PrintStream(out, true, "UTF-8"); + PrintStream printStream = new PrintStream(out, true, StandardCharsets.UTF_8); DiffToChangeLog diffToChangeLog = new DiffToChangeLog(diffResult, new DiffOutputControl().setIncludeCatalog(false).setIncludeSchema(false)); diffToChangeLog.print(printStream); printStream.close(); - return out.toString("UTF-8"); + return out.toString(StandardCharsets.UTF_8); } private void ignoreDatabaseChangeLogTable(DiffResult diffResult) From 188b5626494d8e40f4289f785833e73d916ed26b Mon Sep 17 00:00:00 2001 From: filipe Date: Wed, 20 Sep 2023 14:33:53 -0300 Subject: [PATCH 08/12] We are already building with 11 --- pom.xml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pom.xml b/pom.xml index 8268b70c..6c496810 100644 --- a/pom.xml +++ b/pom.xml @@ -211,7 +211,10 @@ true true ${project.build.sourceEncoding} + 11 + 11 + maven-surefire-plugin From c2c6598c355212c1e0497d25e114fde54553245f Mon Sep 17 00:00:00 2001 From: filipe Date: Wed, 20 Sep 2023 14:36:26 -0300 Subject: [PATCH 09/12] Java 21 is not available yet --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c6ce5625..cd432603 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -60,7 +60,7 @@ jobs: strategy: fail-fast: false matrix: - java: [ 17, 21 ] + java: [ 17, 20 ] steps: - uses: actions/checkout@v4 From 00680a250ff1ac8a703231ecd81bb48e56537b49 Mon Sep 17 00:00:00 2001 From: filipe Date: Wed, 20 Sep 2023 14:50:13 -0300 Subject: [PATCH 10/12] Refactoring --- .../snapshot/IndexSnapshotGenerator.java | 48 ++++++++----------- 1 file changed, 19 insertions(+), 29 deletions(-) diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java index 1bf59a7e..c72b15a6 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/IndexSnapshotGenerator.java @@ -7,8 +7,6 @@ import liquibase.structure.DatabaseObject; import liquibase.structure.core.*; -import java.util.Map; - public class IndexSnapshotGenerator extends HibernateSnapshotGenerator { private static final String HIBERNATE_ORDER_ASC = "asc"; @@ -25,24 +23,12 @@ protected DatabaseObject snapshotObject(DatabaseObject example, DatabaseSnapshot return example; } Relation table = ((Index) example).getRelation(); - org.hibernate.mapping.Table hibernateTable = findHibernateTable(table, snapshot); + var hibernateTable = findHibernateTable(table, snapshot); if (hibernateTable == null) { return example; } - Map indexes = hibernateTable.getIndexes(); - for (org.hibernate.mapping.Index hibernateIndex : indexes.values()) { - Index index = new Index(); - index.setRelation(table); - index.setName(hibernateIndex.getName()); - index.setUnique(isUniqueIndex(hibernateIndex)); - for (var hibernateColumn : hibernateIndex.getColumns()) { - String hibernateOrder = hibernateIndex.getColumnOrderMap().get(hibernateColumn); - Boolean descending = HIBERNATE_ORDER_ASC.equals(hibernateOrder) - ? Boolean.FALSE - : (HIBERNATE_ORDER_DESC.equals(hibernateOrder) ? Boolean.TRUE : null); - index.getColumns().add(new Column(hibernateColumn.getName()).setRelation(table).setDescending(descending)); - } - + for (var hibernateIndex : hibernateTable.getIndexes().values()) { + Index index = handleHibernateIndex(table, hibernateIndex); if (index.getColumnNames().equalsIgnoreCase(((Index) example).getColumnNames())) { Scope.getCurrentScope().getLog(getClass()).info("Found index " + index.getName()); table.getIndexes().add(index); @@ -65,24 +51,28 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro return; } for (var hibernateIndex : hibernateTable.getIndexes().values()) { - Index index = new Index(); - index.setRelation(table); - index.setName(hibernateIndex.getName()); - index.setUnique(isUniqueIndex(hibernateIndex)); - - for (var hibernateColumn : hibernateIndex.getColumns()) { - String hibernateOrder = hibernateIndex.getColumnOrderMap().get(hibernateColumn); - Boolean descending = HIBERNATE_ORDER_ASC.equals(hibernateOrder) - ? Boolean.FALSE - : (HIBERNATE_ORDER_DESC.equals(hibernateOrder) ? Boolean.TRUE : null); - index.getColumns().add(new Column(hibernateColumn.getName()).setRelation(table).setDescending(descending)); - } + Index index = handleHibernateIndex(table, hibernateIndex); Scope.getCurrentScope().getLog(getClass()).info("Found index " + index.getName()); table.getIndexes().add(index); } } } + private Index handleHibernateIndex(Relation table, org.hibernate.mapping.Index hibernateIndex) { + Index index = new Index(); + index.setRelation(table); + index.setName(hibernateIndex.getName()); + index.setUnique(isUniqueIndex(hibernateIndex)); + for (var hibernateColumn : hibernateIndex.getColumns()) { + String hibernateOrder = hibernateIndex.getColumnOrderMap().get(hibernateColumn); + Boolean descending = HIBERNATE_ORDER_ASC.equals(hibernateOrder) + ? Boolean.FALSE + : (HIBERNATE_ORDER_DESC.equals(hibernateOrder) ? Boolean.TRUE : null); + index.getColumns().add(new Column(hibernateColumn.getName()).setRelation(table).setDescending(descending)); + } + return index; + } + private Boolean isUniqueIndex(org.hibernate.mapping.Index hibernateIndex) { /* This seems to be necessary to explicitly tell liquibase that there's no From ab88e529dafd32a401f77842b34a90757f7a0751 Mon Sep 17 00:00:00 2001 From: filipe Date: Thu, 21 Sep 2023 14:54:04 -0300 Subject: [PATCH 11/12] Component has the method implemented. --- .../ext/hibernate/snapshot/TableSnapshotGenerator.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java index 18ad4e65..cf05ce76 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java @@ -11,9 +11,9 @@ import liquibase.structure.core.Schema; import liquibase.structure.core.Table; import org.hibernate.boot.spi.MetadataImplementor; -import org.hibernate.id.IdentifierGenerator; -import org.hibernate.mapping.Join; import org.hibernate.generator.Generator; +import org.hibernate.mapping.Component; +import org.hibernate.mapping.Join; import org.hibernate.mapping.PersistentClass; import org.hibernate.mapping.RootClass; @@ -85,8 +85,9 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro Iterator classMappings = entityBindings.iterator(); while (classMappings.hasNext()) { PersistentClass persistentClass = classMappings.next(); - if (!persistentClass.isInherited()) { - Generator ig = persistentClass.getIdentifier().createGenerator( + if (!persistentClass.isInherited() && persistentClass.getIdentifier() instanceof Component) { + var component = (Component) persistentClass.getIdentifier(); + Generator ig = component.createGenerator( metadata.getMetadataBuildingOptions().getIdentifierGeneratorFactory(), database.getDialect(), (RootClass) persistentClass From 5f4faf77b3da98ea61c3e8a5e0680d540dd932ef Mon Sep 17 00:00:00 2001 From: filipe Date: Thu, 21 Sep 2023 14:55:16 -0300 Subject: [PATCH 12/12] Should be SimpleValue --- .../hibernate/snapshot/TableSnapshotGenerator.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java b/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java index cf05ce76..0aa05b76 100644 --- a/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java +++ b/src/main/java/liquibase/ext/hibernate/snapshot/TableSnapshotGenerator.java @@ -12,10 +12,7 @@ import liquibase.structure.core.Table; import org.hibernate.boot.spi.MetadataImplementor; import org.hibernate.generator.Generator; -import org.hibernate.mapping.Component; -import org.hibernate.mapping.Join; -import org.hibernate.mapping.PersistentClass; -import org.hibernate.mapping.RootClass; +import org.hibernate.mapping.*; import java.util.ArrayList; import java.util.Collection; @@ -85,9 +82,9 @@ protected void addTo(DatabaseObject foundObject, DatabaseSnapshot snapshot) thro Iterator classMappings = entityBindings.iterator(); while (classMappings.hasNext()) { PersistentClass persistentClass = classMappings.next(); - if (!persistentClass.isInherited() && persistentClass.getIdentifier() instanceof Component) { - var component = (Component) persistentClass.getIdentifier(); - Generator ig = component.createGenerator( + if (!persistentClass.isInherited() && persistentClass.getIdentifier() instanceof SimpleValue) { + var simpleValue = (SimpleValue) persistentClass.getIdentifier(); + Generator ig = simpleValue.createGenerator( metadata.getMetadataBuildingOptions().getIdentifierGeneratorFactory(), database.getDialect(), (RootClass) persistentClass