Fix Could not resolve binding for Foreign Key for TableReference name with schema
This commit is contained in:
parent
1363844ca0
commit
becbaea172
|
@ -26,6 +26,7 @@ import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.engine.FetchStrategy;
|
import org.hibernate.engine.FetchStrategy;
|
||||||
import org.hibernate.engine.FetchStyle;
|
import org.hibernate.engine.FetchStyle;
|
||||||
import org.hibernate.engine.FetchTiming;
|
import org.hibernate.engine.FetchTiming;
|
||||||
|
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||||
import org.hibernate.engine.spi.CascadeStyle;
|
import org.hibernate.engine.spi.CascadeStyle;
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
||||||
|
@ -35,10 +36,12 @@ import org.hibernate.mapping.BasicValue;
|
||||||
import org.hibernate.mapping.Collection;
|
import org.hibernate.mapping.Collection;
|
||||||
import org.hibernate.mapping.Component;
|
import org.hibernate.mapping.Component;
|
||||||
import org.hibernate.mapping.IndexedCollection;
|
import org.hibernate.mapping.IndexedCollection;
|
||||||
|
import org.hibernate.mapping.KeyValue;
|
||||||
import org.hibernate.mapping.OneToMany;
|
import org.hibernate.mapping.OneToMany;
|
||||||
import org.hibernate.mapping.PersistentClass;
|
import org.hibernate.mapping.PersistentClass;
|
||||||
import org.hibernate.mapping.Property;
|
import org.hibernate.mapping.Property;
|
||||||
import org.hibernate.mapping.Selectable;
|
import org.hibernate.mapping.Selectable;
|
||||||
|
import org.hibernate.mapping.Table;
|
||||||
import org.hibernate.mapping.ToOne;
|
import org.hibernate.mapping.ToOne;
|
||||||
import org.hibernate.mapping.Value;
|
import org.hibernate.mapping.Value;
|
||||||
import org.hibernate.metamodel.CollectionClassification;
|
import org.hibernate.metamodel.CollectionClassification;
|
||||||
|
@ -66,7 +69,6 @@ import org.hibernate.persister.collection.CollectionPersister;
|
||||||
import org.hibernate.persister.collection.SQLLoadableCollection;
|
import org.hibernate.persister.collection.SQLLoadableCollection;
|
||||||
import org.hibernate.persister.entity.EntityPersister;
|
import org.hibernate.persister.entity.EntityPersister;
|
||||||
import org.hibernate.persister.entity.Joinable;
|
import org.hibernate.persister.entity.Joinable;
|
||||||
import org.hibernate.persister.entity.OuterJoinLoadable;
|
|
||||||
import org.hibernate.persister.walking.internal.FetchStrategyHelper;
|
import org.hibernate.persister.walking.internal.FetchStrategyHelper;
|
||||||
import org.hibernate.property.access.spi.PropertyAccess;
|
import org.hibernate.property.access.spi.PropertyAccess;
|
||||||
import org.hibernate.query.NavigablePath;
|
import org.hibernate.query.NavigablePath;
|
||||||
|
@ -912,7 +914,8 @@ public class MappingModelCreationHelper {
|
||||||
ManagedMappingType declaringType,
|
ManagedMappingType declaringType,
|
||||||
Dialect dialect,
|
Dialect dialect,
|
||||||
MappingModelCreationProcess creationProcess) {
|
MappingModelCreationProcess creationProcess) {
|
||||||
final Type keyType = bootValueMapping.getKey().getType();
|
final KeyValue bootValueMappingKey = bootValueMapping.getKey();
|
||||||
|
final Type keyType = bootValueMappingKey.getType();
|
||||||
|
|
||||||
final ModelPart fkTarget;
|
final ModelPart fkTarget;
|
||||||
final String lhsPropertyName = collectionDescriptor.getCollectionType().getLHSPropertyName();
|
final String lhsPropertyName = collectionDescriptor.getCollectionType().getLHSPropertyName();
|
||||||
|
@ -924,14 +927,14 @@ public class MappingModelCreationHelper {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( keyType instanceof BasicType ) {
|
if ( keyType instanceof BasicType ) {
|
||||||
assert bootValueMapping.getKey().getColumnSpan() == 1;
|
assert bootValueMappingKey.getColumnSpan() == 1;
|
||||||
assert fkTarget instanceof BasicValuedModelPart;
|
assert fkTarget instanceof BasicValuedModelPart;
|
||||||
final BasicValuedModelPart simpleFkTarget = (BasicValuedModelPart) fkTarget;
|
final BasicValuedModelPart simpleFkTarget = (BasicValuedModelPart) fkTarget;
|
||||||
|
|
||||||
return new SimpleForeignKeyDescriptor(
|
return new SimpleForeignKeyDescriptor(
|
||||||
( (AssociationType) bootValueMapping.getType() ).getForeignKeyDirection(),
|
( (AssociationType) bootValueMapping.getType() ).getForeignKeyDirection(),
|
||||||
bootValueMapping.getKey().getTable().getName(),
|
getTableIdentifierExpression( bootValueMappingKey.getTable(), creationProcess ),
|
||||||
bootValueMapping.getKey().getColumnIterator().next().getText( dialect ),
|
bootValueMappingKey.getColumnIterator().next().getText( dialect ),
|
||||||
simpleFkTarget.getContainingTableExpression(),
|
simpleFkTarget.getContainingTableExpression(),
|
||||||
simpleFkTarget.getMappedColumnExpression(),
|
simpleFkTarget.getMappedColumnExpression(),
|
||||||
(BasicType) keyType
|
(BasicType) keyType
|
||||||
|
@ -968,28 +971,21 @@ public class MappingModelCreationHelper {
|
||||||
final JdbcServices jdbcServices = creationProcess.getCreationContext().getSessionFactory().getJdbcServices();
|
final JdbcServices jdbcServices = creationProcess.getCreationContext().getSessionFactory().getJdbcServices();
|
||||||
if ( fkTarget instanceof BasicValuedModelPart ) {
|
if ( fkTarget instanceof BasicValuedModelPart ) {
|
||||||
final String keyColumnExpression;
|
final String keyColumnExpression;
|
||||||
final String keyTableIdentifierExpression;
|
|
||||||
if ( bootValueMapping.isReferenceToPrimaryKey() ) {
|
if ( bootValueMapping.isReferenceToPrimaryKey() ) {
|
||||||
final Iterator<Selectable> columnIterator = bootValueMapping.getColumnIterator();
|
final Iterator<Selectable> columnIterator = bootValueMapping.getColumnIterator();
|
||||||
|
final Table table = bootValueMapping.getTable();
|
||||||
if ( columnIterator.hasNext() ) {
|
if ( columnIterator.hasNext() ) {
|
||||||
keyColumnExpression = columnIterator.next().getText( dialect );
|
keyColumnExpression = columnIterator.next().getText( dialect );
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
// case of ToOne with @PrimaryKeyJoinColumn
|
// case of ToOne with @PrimaryKeyJoinColumn
|
||||||
keyColumnExpression = bootValueMapping.getTable().getColumn( 0 ).getName();
|
keyColumnExpression = table.getColumn( 0 ).getName();
|
||||||
}
|
}
|
||||||
|
|
||||||
keyTableIdentifierExpression = creationProcess.getCreationContext()
|
|
||||||
.getBootstrapContext()
|
|
||||||
.getMetadataBuildingOptions()
|
|
||||||
.getPhysicalNamingStrategy().toPhysicalTableName(
|
|
||||||
bootValueMapping.getTable().getNameIdentifier(),
|
|
||||||
jdbcServices.getJdbcEnvironment()
|
|
||||||
).getText();
|
|
||||||
final BasicValuedModelPart simpleFkTarget = (BasicValuedModelPart) fkTarget;
|
final BasicValuedModelPart simpleFkTarget = (BasicValuedModelPart) fkTarget;
|
||||||
ForeignKeyDescriptor foreignKeyDescriptor = new SimpleForeignKeyDescriptor(
|
ForeignKeyDescriptor foreignKeyDescriptor = new SimpleForeignKeyDescriptor(
|
||||||
foreignKeyDirection,
|
foreignKeyDirection,
|
||||||
keyTableIdentifierExpression,
|
getTableIdentifierExpression( table, creationProcess ),
|
||||||
keyColumnExpression,
|
keyColumnExpression,
|
||||||
simpleFkTarget.getContainingTableExpression(),
|
simpleFkTarget.getContainingTableExpression(),
|
||||||
simpleFkTarget.getMappedColumnExpression(),
|
simpleFkTarget.getMappedColumnExpression(),
|
||||||
|
@ -1034,6 +1030,18 @@ public class MappingModelCreationHelper {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String getTableIdentifierExpression(Table table, MappingModelCreationProcess creationProcess) {
|
||||||
|
final JdbcEnvironment jdbcEnvironment = creationProcess.getCreationContext()
|
||||||
|
.getMetadata()
|
||||||
|
.getDatabase()
|
||||||
|
.getJdbcEnvironment();
|
||||||
|
return jdbcEnvironment
|
||||||
|
.getQualifiedObjectNameFormatter().format(
|
||||||
|
table.getQualifiedTableName(),
|
||||||
|
jdbcEnvironment.getDialect()
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
private static CollectionPart interpretMapKey(
|
private static CollectionPart interpretMapKey(
|
||||||
Collection bootValueMapping,
|
Collection bootValueMapping,
|
||||||
CollectionPersister collectionDescriptor,
|
CollectionPersister collectionDescriptor,
|
||||||
|
|
Loading…
Reference in New Issue