Skip to content

Commit 52410ef

Browse files
committed
HHH-10133 - CatalogSeparator of dialect metadata not used in runtime, just in schema tool
(cherry picked from commit 3571218)
1 parent 9c2170a commit 52410ef

File tree

9 files changed

+470
-113
lines changed

9 files changed

+470
-113
lines changed

hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedName.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@
1414
* <li>{@link java.sql.DatabaseMetaData#isCatalogAtStart}</li>
1515
* <li>{@link java.sql.DatabaseMetaData#getCatalogSeparator()}</li>
1616
* </ol>
17+
* <p/>
18+
* Also, be careful about the usage of {@link #render}. If the intention is get get the name
19+
* as used in the database, the {@link org.hibernate.engine.jdbc.env.spi.JdbcEnvironment} ->
20+
* {@link org.hibernate.engine.jdbc.env.spi.QualifiedObjectNameFormatter#format} should be
21+
* used instead.
1722
*
1823
* @author Steve Ebersole
1924
*/
@@ -22,5 +27,14 @@ public interface QualifiedName {
2227
Identifier getSchemaName();
2328
Identifier getObjectName();
2429

30+
/**
31+
* Returns a String-form of the qualified name.
32+
* <p/>
33+
* Depending on intention, may not be appropriate. May want
34+
* {@link org.hibernate.engine.jdbc.env.spi.QualifiedObjectNameFormatter#format}
35+
* instead. See {@link org.hibernate.engine.jdbc.env.spi.JdbcEnvironment#getQualifiedObjectNameFormatter}
36+
*
37+
* @return The string form
38+
*/
2539
String render();
2640
}

hibernate-core/src/main/java/org/hibernate/mapping/Table.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import org.hibernate.boot.model.relational.Namespace;
2424
import org.hibernate.boot.model.relational.QualifiedTableName;
2525
import org.hibernate.dialect.Dialect;
26+
import org.hibernate.engine.jdbc.env.spi.QualifiedObjectNameFormatter;
2627
import org.hibernate.engine.spi.Mapping;
2728
import org.hibernate.internal.util.StringHelper;
2829
import org.hibernate.tool.hbm2ddl.ColumnMetadata;
@@ -106,6 +107,11 @@ public Table(Namespace namespace, String subselect, boolean isAbstract) {
106107
this.isAbstract = isAbstract;
107108
}
108109

110+
/**
111+
* @deprecated Should use {@link QualifiedObjectNameFormatter#format} on QualifiedObjectNameFormatter
112+
* obtained from {@link org.hibernate.engine.jdbc.env.spi.JdbcEnvironment}
113+
*/
114+
@Deprecated
109115
public String getQualifiedName(Dialect dialect, String defaultCatalog, String defaultSchema) {
110116
if ( subselect != null ) {
111117
return "( " + subselect + " )";
@@ -120,6 +126,11 @@ public String getQualifiedName(Dialect dialect, String defaultCatalog, String de
120126
return qualify( usedCatalog, usedSchema, quotedName );
121127
}
122128

129+
/**
130+
* @deprecated Should use {@link QualifiedObjectNameFormatter#format} on QualifiedObjectNameFormatter
131+
* obtained from {@link org.hibernate.engine.jdbc.env.spi.JdbcEnvironment}
132+
*/
133+
@Deprecated
123134
public static String qualify(String catalog, String schema, String table) {
124135
StringBuilder qualifiedName = new StringBuilder();
125136
if ( catalog != null ) {

hibernate-core/src/main/java/org/hibernate/persister/collection/AbstractCollectionPersister.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.hibernate.MappingException;
2323
import org.hibernate.QueryException;
2424
import org.hibernate.TransientObjectException;
25+
import org.hibernate.boot.model.relational.Database;
2526
import org.hibernate.cache.CacheException;
2627
import org.hibernate.cache.spi.access.CollectionRegionAccessStrategy;
2728
import org.hibernate.cache.spi.entry.CacheEntryStructure;
@@ -31,6 +32,7 @@
3132
import org.hibernate.collection.spi.PersistentCollection;
3233
import org.hibernate.dialect.Dialect;
3334
import org.hibernate.engine.jdbc.batch.internal.BasicBatchKey;
35+
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
3436
import org.hibernate.engine.jdbc.spi.SqlExceptionHelper;
3537
import org.hibernate.engine.spi.EntityKey;
3638
import org.hibernate.engine.spi.ExecuteUpdateResultCheckStyle;
@@ -230,9 +232,12 @@ public AbstractCollectionPersister(
230232
CollectionRegionAccessStrategy cacheAccessStrategy,
231233
PersisterCreationContext creationContext) throws MappingException, CacheException {
232234

235+
final Database database = creationContext.getMetadata().getDatabase();
236+
final JdbcEnvironment jdbcEnvironment = database.getJdbcEnvironment();
237+
233238
this.factory = creationContext.getSessionFactory();
234239
this.cacheAccessStrategy = cacheAccessStrategy;
235-
if ( factory.getSettings().isStructuredCacheEntriesEnabled() ) {
240+
if ( factory.getSessionFactoryOptions().isStructuredCacheEntriesEnabled() ) {
236241
cacheEntryStructure = collectionBinding.isMap()
237242
? StructuredMapCacheEntry.INSTANCE
238243
: StructuredCollectionCacheEntry.INSTANCE;
@@ -260,11 +265,7 @@ public AbstractCollectionPersister(
260265
isArray = collectionBinding.isArray();
261266
subselectLoadable = collectionBinding.isSubselectLoadable();
262267

263-
qualifiedTableName = table.getQualifiedName(
264-
dialect,
265-
factory.getSettings().getDefaultCatalogName(),
266-
factory.getSettings().getDefaultSchemaName()
267-
);
268+
qualifiedTableName = determineTableName( table, jdbcEnvironment );
268269

269270
int spacesSize = 1 + collectionBinding.getSynchronizedTables().size();
270271
spaces = new String[spacesSize];
@@ -284,7 +285,7 @@ public AbstractCollectionPersister(
284285

285286
int batch = collectionBinding.getBatchSize();
286287
if ( batch == -1 ) {
287-
batch = factory.getSettings().getDefaultBatchFetchSize();
288+
batch = factory.getSessionFactoryOptions().getDefaultBatchFetchSize();
288289
}
289290
batchSize = batch;
290291

@@ -585,6 +586,17 @@ else if ( !elementType.isEntityType() ) {
585586
initCollectionPropertyMap();
586587
}
587588

589+
protected String determineTableName(Table table, JdbcEnvironment jdbcEnvironment) {
590+
if ( table.getSubselect() != null ) {
591+
return "( " + table.getSubselect() + " )";
592+
}
593+
594+
return jdbcEnvironment.getQualifiedObjectNameFormatter().format(
595+
table.getQualifiedTableName(),
596+
jdbcEnvironment.getDialect()
597+
);
598+
}
599+
588600
private class ColumnMapperImpl implements ColumnMapper {
589601
@Override
590602
public SqlValueReference[] map(String reference) {

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@
5454
import org.hibernate.engine.internal.StatefulPersistenceContext;
5555
import org.hibernate.engine.internal.Versioning;
5656
import org.hibernate.engine.jdbc.batch.internal.BasicBatchKey;
57+
import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment;
5758
import org.hibernate.engine.spi.CachedNaturalIdValueSource;
5859
import org.hibernate.engine.spi.CascadeStyle;
5960
import org.hibernate.engine.spi.CascadingActions;
@@ -92,6 +93,7 @@
9293
import org.hibernate.mapping.PersistentClass;
9394
import org.hibernate.mapping.Property;
9495
import org.hibernate.mapping.Selectable;
96+
import org.hibernate.mapping.Table;
9597
import org.hibernate.metadata.ClassMetadata;
9698
import org.hibernate.persister.collection.CollectionPersister;
9799
import org.hibernate.persister.spi.PersisterCreationContext;
@@ -5111,6 +5113,17 @@ public int determineTableNumberForColumn(String columnName) {
51115113
return 0;
51125114
}
51135115

5116+
protected String determineTableName(Table table, JdbcEnvironment jdbcEnvironment) {
5117+
if ( table.getSubselect() != null ) {
5118+
return "( " + table.getSubselect() + " )";
5119+
}
5120+
5121+
return jdbcEnvironment.getQualifiedObjectNameFormatter().format(
5122+
table.getQualifiedTableName(),
5123+
jdbcEnvironment.getDialect()
5124+
);
5125+
}
5126+
51145127
@Override
51155128
public EntityEntryFactory getEntityEntryFactory() {
51165129
return this.entityEntryFactory;

0 commit comments

Comments
 (0)