diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java index 4a70fdad05..d62d0afd57 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java @@ -387,6 +387,8 @@ public abstract class AbstractEntityPersister public abstract String getSubclassTableName(int j); + protected abstract String[] getSubclassTableNames(); + protected abstract String[] getSubclassTableKeyColumns(int j); protected abstract boolean isClassOrSuperclassTable(int j); @@ -1267,7 +1269,7 @@ public abstract class AbstractEntityPersister lockMode, primaryTableReference, sqlAliasBase, - (tableExpression) -> ArrayHelper.contains( rootTableKeyColumnNames, tableExpression ), + (tableExpression) -> ArrayHelper.contains( getSubclassTableNames(), tableExpression ), (tableExpression, tableGroup) -> { for ( int i = 0; i < getSubclassTableSpan(); i++ ) { final String subclassTableName = getSubclassTableName( i ); diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java index 94f9baa20c..3e265283dd 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java @@ -1057,6 +1057,11 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { return subclassTableNameClosure[j]; } + @Override + protected String[] getSubclassTableNames() { + return subclassTableNameClosure; + } + public int getSubclassTableSpan() { return subclassTableNameClosure.length; } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java index 5d75f4e5a8..6469c97b6a 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/SingleTableEntityPersister.java @@ -809,6 +809,11 @@ public class SingleTableEntityPersister extends AbstractEntityPersister { return subclassTableNameClosure[j]; } + @Override + protected String[] getSubclassTableNames() { + return subclassTableNameClosure; + } + public int getSubclassTableSpan() { return subclassTableNameClosure.length; } diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java index 650190ea04..ca8d66b358 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/UnionSubclassEntityPersister.java @@ -67,7 +67,7 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { private final String subquery; private final String tableName; //private final String rootTableName; - private final String[] subclassClosure; + private final String[] subclassTableNames; private final String[] spaces; private final String[] subclassSpaces; private final Object discriminatorValue; @@ -101,7 +101,7 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { // TABLE tableName = determineTableName( persistentClass.getTable(), jdbcEnvironment ); - + subclassTableNames = new String[]{tableName}; //Custom SQL String sql; @@ -146,8 +146,6 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { // PROPERTIES int subclassSpan = persistentClass.getSubclassSpan() + 1; - subclassClosure = new String[subclassSpan]; - subclassClosure[0] = getEntityName(); // SUBCLASSES subclassByDiscriminatorValue.put( @@ -159,7 +157,6 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { int k = 1; while ( iter.hasNext() ) { Subclass sc = (Subclass) iter.next(); - subclassClosure[k++] = sc.getEntityName(); subclassByDiscriminatorValue.put( sc.getSubclassId(), sc.getEntityName() ); } } @@ -280,10 +277,6 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { return discriminatorSQLValue; } - public String[] getSubclassClosure() { - return subclassClosure; - } - @Override public String getSubclassForDiscriminatorValue(Object value) { return (String) subclassByDiscriminatorValue.get( value ); @@ -519,6 +512,11 @@ public class UnionSubclassEntityPersister extends AbstractEntityPersister { return tableName; } + @Override + protected String[] getSubclassTableNames(){ + return subclassTableNames; + } + @Override public int getSubclassTableSpan() { return 1;