HHH-12954 Refactor boot/model/relational/Database to avoid holding references to MetadataBuildingOptions
This commit is contained in:
parent
4eb726ef4c
commit
50990dd76b
|
@ -21,20 +21,21 @@ import org.hibernate.dialect.Dialect;
|
|||
import org.hibernate.dialect.H2Dialect;
|
||||
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||
import org.hibernate.engine.jdbc.spi.JdbcServices;
|
||||
import org.hibernate.service.ServiceRegistry;
|
||||
|
||||
/**
|
||||
* @author Steve Ebersole
|
||||
*/
|
||||
public class Database {
|
||||
|
||||
private final Dialect dialect;
|
||||
private final MetadataBuildingOptions buildingOptions;
|
||||
private final JdbcEnvironment jdbcEnvironment;
|
||||
private final Map<Namespace.Name,Namespace> namespaceMap = new TreeMap<Namespace.Name, Namespace>();
|
||||
private final Map<String,AuxiliaryDatabaseObject> auxiliaryDatabaseObjects = new HashMap<String,AuxiliaryDatabaseObject>();
|
||||
private final ServiceRegistry serviceRegistry;
|
||||
private final PhysicalNamingStrategy physicalNamingStrategy;
|
||||
|
||||
private Namespace implicitNamespace;
|
||||
|
||||
private final Map<Namespace.Name,Namespace> namespaceMap = new TreeMap<Namespace.Name, Namespace>();
|
||||
|
||||
private Map<String,AuxiliaryDatabaseObject> auxiliaryDatabaseObjects;
|
||||
private List<InitCommand> initCommands;
|
||||
|
||||
public Database(MetadataBuildingOptions buildingOptions) {
|
||||
|
@ -42,10 +43,9 @@ public class Database {
|
|||
}
|
||||
|
||||
public Database(MetadataBuildingOptions buildingOptions, JdbcEnvironment jdbcEnvironment) {
|
||||
this.buildingOptions = buildingOptions;
|
||||
|
||||
this.serviceRegistry = buildingOptions.getServiceRegistry();
|
||||
this.jdbcEnvironment = jdbcEnvironment;
|
||||
|
||||
this.physicalNamingStrategy = buildingOptions.getPhysicalNamingStrategy();
|
||||
this.dialect = determineDialect( buildingOptions );
|
||||
|
||||
this.implicitNamespace = makeNamespace(
|
||||
|
@ -68,15 +68,11 @@ public class Database {
|
|||
|
||||
private Namespace makeNamespace(Namespace.Name name) {
|
||||
Namespace namespace;
|
||||
namespace = new Namespace( this, name );
|
||||
namespace = new Namespace( this.getPhysicalNamingStrategy(), this.getJdbcEnvironment(), name );
|
||||
namespaceMap.put( name, namespace );
|
||||
return namespace;
|
||||
}
|
||||
|
||||
public MetadataBuildingOptions getBuildingOptions() {
|
||||
return buildingOptions;
|
||||
}
|
||||
|
||||
public Dialect getDialect() {
|
||||
return dialect;
|
||||
}
|
||||
|
@ -105,7 +101,7 @@ public class Database {
|
|||
}
|
||||
|
||||
public PhysicalNamingStrategy getPhysicalNamingStrategy() {
|
||||
return getBuildingOptions().getPhysicalNamingStrategy();
|
||||
return physicalNamingStrategy;
|
||||
}
|
||||
|
||||
public Iterable<Namespace> getNamespaces() {
|
||||
|
@ -148,9 +144,6 @@ public class Database {
|
|||
}
|
||||
|
||||
public void addAuxiliaryDatabaseObject(AuxiliaryDatabaseObject auxiliaryDatabaseObject) {
|
||||
if ( auxiliaryDatabaseObjects == null ) {
|
||||
auxiliaryDatabaseObjects = new HashMap<String,AuxiliaryDatabaseObject>();
|
||||
}
|
||||
auxiliaryDatabaseObjects.put( auxiliaryDatabaseObject.getExportIdentifier(), auxiliaryDatabaseObject );
|
||||
}
|
||||
|
||||
|
@ -172,4 +165,8 @@ public class Database {
|
|||
}
|
||||
initCommands.add( initCommand );
|
||||
}
|
||||
|
||||
public ServiceRegistry getServiceRegistry() {
|
||||
return serviceRegistry;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ import java.util.TreeMap;
|
|||
|
||||
import org.hibernate.HibernateException;
|
||||
import org.hibernate.boot.model.naming.Identifier;
|
||||
import org.hibernate.boot.model.naming.PhysicalNamingStrategy;
|
||||
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
|
||||
import org.hibernate.internal.CoreLogging;
|
||||
import org.hibernate.internal.CoreMessageLogger;
|
||||
import org.hibernate.mapping.DenormalizedTable;
|
||||
|
@ -26,22 +28,24 @@ import org.hibernate.mapping.Table;
|
|||
public class Namespace {
|
||||
private static final CoreMessageLogger log = CoreLogging.messageLogger( Namespace.class );
|
||||
|
||||
private final Database database;
|
||||
private final PhysicalNamingStrategy physicalNamingStrategy;
|
||||
private final JdbcEnvironment jdbcEnvironment;
|
||||
private final Name name;
|
||||
private final Name physicalName;
|
||||
|
||||
private Map<Identifier, Table> tables = new TreeMap<Identifier, Table>();
|
||||
private Map<Identifier, Sequence> sequences = new TreeMap<Identifier, Sequence>();
|
||||
|
||||
public Namespace(Database database, Name name) {
|
||||
this.database = database;
|
||||
public Namespace(PhysicalNamingStrategy physicalNamingStrategy, JdbcEnvironment jdbcEnvironment, Name name) {
|
||||
this.physicalNamingStrategy = physicalNamingStrategy;
|
||||
this.jdbcEnvironment = jdbcEnvironment;
|
||||
this.name = name;
|
||||
|
||||
this.physicalName = new Name(
|
||||
database.getPhysicalNamingStrategy()
|
||||
.toPhysicalCatalogName( name.getCatalog(), database.getJdbcEnvironment() ),
|
||||
database.getPhysicalNamingStrategy()
|
||||
.toPhysicalSchemaName( name.getSchema(), database.getJdbcEnvironment() )
|
||||
physicalNamingStrategy
|
||||
.toPhysicalCatalogName( name.getCatalog(), jdbcEnvironment ),
|
||||
physicalNamingStrategy
|
||||
.toPhysicalSchemaName( name.getSchema(), jdbcEnvironment )
|
||||
);
|
||||
|
||||
log.debugf(
|
||||
|
@ -89,7 +93,7 @@ public class Namespace {
|
|||
return existing;
|
||||
}
|
||||
|
||||
final Identifier physicalTableName = database.getPhysicalNamingStrategy().toPhysicalTableName( logicalTableName, database.getJdbcEnvironment() );
|
||||
final Identifier physicalTableName = physicalNamingStrategy.toPhysicalTableName( logicalTableName, jdbcEnvironment );
|
||||
Table table = new Table( this, physicalTableName, isAbstract );
|
||||
tables.put( logicalTableName, table );
|
||||
return table;
|
||||
|
@ -102,7 +106,7 @@ public class Namespace {
|
|||
return (DenormalizedTable) existing;
|
||||
}
|
||||
|
||||
final Identifier physicalTableName = database.getPhysicalNamingStrategy().toPhysicalTableName( logicalTableName, database.getJdbcEnvironment() );
|
||||
final Identifier physicalTableName = physicalNamingStrategy.toPhysicalTableName( logicalTableName, jdbcEnvironment );
|
||||
DenormalizedTable table = new DenormalizedTable( this, physicalTableName, isAbstract, includedTable );
|
||||
tables.put( logicalTableName, table );
|
||||
return table;
|
||||
|
@ -117,7 +121,7 @@ public class Namespace {
|
|||
throw new HibernateException( "Sequence was already registered with that name [" + logicalName.toString() + "]" );
|
||||
}
|
||||
|
||||
final Identifier physicalName = database.getPhysicalNamingStrategy().toPhysicalSequenceName( logicalName, database.getJdbcEnvironment() );
|
||||
final Identifier physicalName = physicalNamingStrategy.toPhysicalSequenceName( logicalName, jdbcEnvironment );
|
||||
|
||||
Sequence sequence = new Sequence(
|
||||
this.physicalName.getCatalog(),
|
||||
|
|
|
@ -141,7 +141,7 @@ public class ExportableColumn extends Column {
|
|||
|
||||
@Override
|
||||
public ServiceRegistry getServiceRegistry() {
|
||||
return database.getBuildingOptions().getServiceRegistry();
|
||||
return database.getServiceRegistry();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ public class NamespaceTest {
|
|||
|
||||
@Test
|
||||
public void testPhysicalNameSchemaAndCatalog() {
|
||||
Namespace namespace = new Namespace( mockDatabase, name );
|
||||
Namespace namespace = new Namespace( mockDatabase.getPhysicalNamingStrategy(), mockDatabase.getJdbcEnvironment(), name );
|
||||
|
||||
final Namespace.Name physicalName = namespace.getPhysicalName();
|
||||
|
||||
|
|
Loading…
Reference in New Issue