From 3179aa23ea291717c969e4eb2b4ff336008f4007 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Tue, 12 Apr 2022 09:33:40 +0200 Subject: [PATCH] Sort DeployInheritInfo, so that DDL is deterministic (cherry picked from commit 6412e060e6370444fad19a4cd573d6e94c488ee9) --- .../deploy/parse/DeployInheritInfo.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java index f82daa987..ef92648fb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java @@ -7,12 +7,14 @@ import javax.persistence.DiscriminatorType; import java.sql.Types; import java.util.ArrayList; import java.util.List; +import java.util.Set; +import java.util.TreeSet; /** * Represents a node in the Inheritance tree. * Holds information regarding Super Subclass support. */ -public final class DeployInheritInfo { +public final class DeployInheritInfo implements Comparable { /** * the default discriminator column according to the JPA 1.0 spec. @@ -27,7 +29,7 @@ public final class DeployInheritInfo { private String columnDefn; private final Class type; private Class parent; - private final ArrayList children = new ArrayList<>(); + private final Set children = new TreeSet<>(); /** * Create for a given type. @@ -74,7 +76,7 @@ public final class DeployInheritInfo { /** * Return the child nodes. */ - public List children() { + public Set children() { return children; } @@ -251,7 +253,22 @@ public final class DeployInheritInfo { @Override public String toString() { - return "InheritInfo[" + type.getName() + "]" + " root[" + parent.getName() + "]" + " disValue[" + discriminatorStringValue + "]"; + String root = parent == null ? null : parent.getName(); + String name = type == null ? null : type.getName(); + return "InheritInfo[" + name + "]" + " root[" + root + "]" + " disValue[" + discriminatorStringValue + "]"; + } + + @Override + public int compareTo(DeployInheritInfo o) { + if (o == this || o.discriminatorStringValue == null && discriminatorStringValue == null) { + return 0; + } else if (o.discriminatorStringValue == null) { + return 1; + } else if (discriminatorStringValue == null) { + return -1; + } else { + return discriminatorStringValue.compareTo(o.discriminatorStringValue); + } } }