From 9a9fb43ca523cadad73b3efe76cfbbf5defc3a14 Mon Sep 17 00:00:00 2001 From: Andrea Boriero Date: Wed, 25 Nov 2015 10:33:32 +0000 Subject: [PATCH] HHH-9302 - SQLGrammarException with @DiscriminatorColumn in an inheritance hierarchy --- .../entity/JoinedSubclassEntityPersister.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) 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 4c8f96b770..9c07e3f292 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 @@ -887,7 +887,6 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { return temp; } - public String fromTableFragment(String alias) { return getTableName() + ' ' + alias; } @@ -902,11 +901,24 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister { select.setExtraSelectList( discriminatorFragment( name ), getDiscriminatorAlias() ); } else { + if ( getEntityMetamodel().getSuperclass() != null ) { + name = generateTableAlias( name, getRootHierarchyClassTableIndex() ); + } select.addColumn( name, explicitDiscriminatorColumnName, discriminatorAlias ); } } } + private int getRootHierarchyClassTableIndex() { + final String rootHierarchyClassTableName = naturalOrderTableNames[0]; + for ( int i = 0; i < subclassTableNameClosure.length; i++ ) { + if ( subclassTableNameClosure[i].equals( rootHierarchyClassTableName ) ) { + return i; + } + } + return 0; + } + private CaseFragment discriminatorFragment(String alias) { CaseFragment cases = getFactory().getDialect().createCaseFragment();