Skip to content

Commit 704ba4f

Browse files
committed
initial work on joined inheritance
1 parent 5cdf6d4 commit 704ba4f

File tree

5 files changed

+61
-15
lines changed

5 files changed

+61
-15
lines changed

hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import java.util.TreeMap;
3030
import java.util.TreeSet;
3131
import java.util.concurrent.ConcurrentHashMap;
32-
import java.util.concurrent.atomic.AtomicInteger;
3332
import java.util.function.Consumer;
3433
import java.util.function.Supplier;
3534

@@ -181,8 +180,6 @@
181180
import org.hibernate.sql.ast.spi.SqlAstCreationContext;
182181
import org.hibernate.sql.ast.tree.expression.ColumnReference;
183182
import org.hibernate.sql.ast.tree.expression.Expression;
184-
import org.hibernate.sql.ast.tree.expression.QueryLiteral;
185-
import org.hibernate.sql.ast.tree.from.StandardTableGroup;
186183
import org.hibernate.sql.ast.tree.from.TableGroup;
187184
import org.hibernate.sql.ast.tree.from.TableGroupBuilder;
188185
import org.hibernate.sql.ast.tree.from.TableReference;
@@ -6098,7 +6095,7 @@ public CacheEntry buildCacheEntry(Object entity, Object[] state, Object version,
60986095

60996096
private SortedMap<String, AttributeMapping> declaredAttributeMappings = new TreeMap<>();
61006097
private List<AttributeMapping> attributeMappings;
6101-
private List<Fetchable> staticFetchableList;
6098+
protected List<Fetchable> staticFetchableList;
61026099

61036100
protected ReflectionOptimizer.AccessOptimizer accessOptimizer;
61046101

@@ -6118,7 +6115,6 @@ public void prepareMappingModel(MappingModelCreationProcess creationProcess) {
61186115

61196116
this.identifierMapping = superMappingType.getIdentifierMapping();
61206117
this.versionMapping = superMappingType.getVersionMapping();
6121-
this.discriminatorMapping = superMappingType.getDiscriminatorMapping();
61226118
this.naturalIdMapping = superMappingType.getNaturalIdMapping();
61236119
}
61246120
else {
@@ -6553,7 +6549,7 @@ public void visitFetchables(
65536549
}
65546550
}
65556551

6556-
private List<Fetchable> getStaticFetchableList() {
6552+
protected List<Fetchable> getStaticFetchableList() {
65576553
if ( staticFetchableList == null ) {
65586554
staticFetchableList = new ArrayList<>( attributeMappings.size() );
65596555
visitAttributeMappings( attributeMapping -> staticFetchableList.add( (Fetchable) attributeMapping ) );

hibernate-core/src/main/java/org/hibernate/persister/entity/JoinedSubclassEntityPersister.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import org.hibernate.AssertionFailure;
1010
import org.hibernate.HibernateException;
1111
import org.hibernate.MappingException;
12-
import org.hibernate.NotYetImplementedFor6Exception;
1312
import org.hibernate.QueryException;
1413
import org.hibernate.boot.model.relational.Database;
1514
import org.hibernate.cache.spi.access.EntityDataAccess;
@@ -35,14 +34,15 @@
3534
import org.hibernate.mapping.Table;
3635
import org.hibernate.mapping.Value;
3736
import org.hibernate.persister.spi.PersisterCreationContext;
37+
import org.hibernate.query.sqm.sql.SqlExpressionResolver;
3838
import org.hibernate.sql.CaseFragment;
3939
import org.hibernate.sql.InFragment;
4040
import org.hibernate.sql.Insert;
4141
import org.hibernate.sql.SelectFragment;
42+
import org.hibernate.sql.results.spi.Fetchable;
4243
import org.hibernate.type.DiscriminatorType;
4344
import org.hibernate.type.StandardBasicTypes;
4445
import org.hibernate.type.Type;
45-
import org.hibernate.type.descriptor.java.JavaTypeDescriptor;
4646

4747
import org.jboss.logging.Logger;
4848

@@ -51,6 +51,7 @@
5151
import java.util.HashMap;
5252
import java.util.HashSet;
5353
import java.util.Iterator;
54+
import java.util.List;
5455
import java.util.Map;
5556
import java.util.Set;
5657

@@ -130,6 +131,10 @@ public class JoinedSubclassEntityPersister extends AbstractEntityPersister {
130131
private final boolean[] isNullableTable;
131132
private final boolean[] isInverseTable;
132133

134+
// private final String tableName;
135+
//
136+
// private final String superClassTableName;
137+
133138
//INITIALIZATION:
134139

135140
public JoinedSubclassEntityPersister(
@@ -207,6 +212,16 @@ else if ( persistentClass.isDiscriminatorValueNotNull() ) {
207212
throw new MappingException( "optimistic-lock=all|dirty not supported for joined-subclass mappings [" + getEntityName() + "]" );
208213
}
209214

215+
// final PersistentClass superclass = persistentClass.getSuperclass();
216+
// if ( superclass != null ) {
217+
// superClassTableName = determineTableName( superclass.getTable(), jdbcEnvironment );
218+
// }
219+
// else {
220+
// superClassTableName = null;
221+
// }
222+
//
223+
// tableName = determineTableName( persistentClass.getTable(), jdbcEnvironment );
224+
210225
//MULTITABLES
211226

212227
final int idColumnSpan = getIdentifierColumnSpan();
@@ -1073,10 +1088,6 @@ public String[][] getContraintOrderedTableKeyColumnClosure() {
10731088
return constraintOrderedKeyColumnNames;
10741089
}
10751090

1076-
public String getRootTableName() {
1077-
return naturalOrderTableNames[0];
1078-
}
1079-
10801091
public String getRootTableAlias(String drivingAlias) {
10811092
return generateTableAlias( drivingAlias, getTableId( getRootTableName(), tableNames ) );
10821093
}
@@ -1117,6 +1128,23 @@ public int determineTableNumberForColumn(String columnName) {
11171128
throw new HibernateException( "Could not locate table which owns column [" + columnName + "] referenced in order-by mapping" );
11181129
}
11191130

1131+
@Override
1132+
protected void buildDiscriminatorMapping() {
1133+
if ( hasSubclasses() ) {
1134+
super.buildDiscriminatorMapping();
1135+
}
1136+
}
1137+
1138+
@Override
1139+
protected List<Fetchable> getStaticFetchableList() {
1140+
if ( staticFetchableList == null ) {
1141+
staticFetchableList = new ArrayList<>( getAttributeMappings().size() );
1142+
visitAttributeMappings( attributeMapping -> staticFetchableList.add( (Fetchable) attributeMapping ) );
1143+
1144+
}
1145+
return staticFetchableList;
1146+
}
1147+
11201148

11211149
@Override
11221150
public FilterAliasGenerator getFilterAliasGenerator(String rootAlias) {

hibernate-core/src/main/java/org/hibernate/query/sqm/sql/BaseSqmToSqlAstConverter.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import java.util.IdentityHashMap;
1212
import java.util.List;
1313
import java.util.Map;
14+
import java.util.Set;
1415
import java.util.function.Consumer;
1516
import java.util.function.Supplier;
1617

hibernate-core/src/main/java/org/hibernate/sql/ast/tree/from/AbstractColumnReferenceQualifier.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,25 @@ public TableReference resolveTableReference(String tableExpression, Supplier<Tab
3838
public TableReference resolveTableReference(String tableExpression) {
3939
assert tableExpression != null;
4040

41+
final TableReference tableReference = resolveTableReferenceInternal( tableExpression );
42+
if ( tableReference == null ) {
43+
throw new IllegalStateException( "Could not resolve binding for table `" + tableExpression + "`" );
44+
}
45+
46+
return tableReference;
47+
}
48+
49+
protected TableReference resolveTableReferenceInternal(String tableExpression) {
4150
if ( getPrimaryTableReference().getTableExpression().equals( tableExpression ) ) {
4251
return getPrimaryTableReference();
4352
}
4453

4554
for ( TableReferenceJoin tableJoin : getTableReferenceJoins() ) {
46-
if ( tableJoin.getJoinedTableReference().getTableExpression() == tableExpression ) {
55+
if ( tableJoin.getJoinedTableReference().getTableExpression().equals( tableExpression ) ) {
4756
return tableJoin.getJoinedTableReference();
4857
}
4958
}
50-
51-
throw new IllegalStateException( "Could not resolve binding for table `" + tableExpression + "`" );
59+
return null;
5260
}
5361

5462
}

hibernate-core/src/main/java/org/hibernate/sql/ast/tree/from/StandardTableGroup.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,17 @@ public TableReference getPrimaryTableReference() {
5757
public List<TableReferenceJoin> getTableReferenceJoins() {
5858
return tableJoins;
5959
}
60+
61+
@Override
62+
public TableReference resolveTableReferenceInternal(String tableExpression) {
63+
TableReference tableReference = super.resolveTableReferenceInternal( tableExpression );
64+
if ( tableReference == null ) {
65+
for ( TableReferenceJoin tableJoin : tableJoins ) {
66+
if ( tableJoin.getJoinedTableReference().getTableExpression().equals( tableExpression ) ) {
67+
tableReference = tableJoin.getJoinedTableReference();
68+
}
69+
}
70+
}
71+
return tableReference;
72+
}
6073
}

0 commit comments

Comments
 (0)