Skip to content

Commit cf4ef9a

Browse files
committed
HHH-10197 - Fix SchemaManagementException when performing SchemaUpdate
1 parent add6fc8 commit cf4ef9a

File tree

3 files changed

+44
-5
lines changed

3 files changed

+44
-5
lines changed
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
/*
2+
* Hibernate, Relational Persistence for Idiomatic Java
3+
*
4+
* License: GNU Lesser General Public License (LGPL), version 2.1 or later.
5+
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
6+
*/
7+
package org.hibernate.boot.model.naming;
8+
9+
import org.hibernate.internal.util.StringHelper;
10+
11+
/**
12+
* Models an identifier (name), retrieved from the database.
13+
*
14+
* @author Andrea Boriero
15+
*/
16+
public class DatabaseIdentifier extends Identifier {
17+
/**
18+
* Constructs a datatabase identifier instance.
19+
*
20+
* @param text The identifier text.
21+
*/
22+
public DatabaseIdentifier(String text) {
23+
super( text, false );
24+
}
25+
26+
public static DatabaseIdentifier toIdentifier(String text) {
27+
if ( StringHelper.isEmpty( text ) ) {
28+
return null;
29+
}
30+
return new DatabaseIdentifier( text );
31+
}
32+
}

hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.util.Set;
1111
import java.util.TreeSet;
1212

13+
import org.hibernate.boot.model.naming.DatabaseIdentifier;
1314
import org.hibernate.boot.model.naming.Identifier;
1415
import org.hibernate.engine.jdbc.env.spi.IdentifierCaseStrategy;
1516
import org.hibernate.engine.jdbc.env.spi.IdentifierHelper;
@@ -122,6 +123,10 @@ private String toMetaDataText(Identifier identifier) {
122123
throw new IllegalArgumentException( "Identifier cannot be null; bad usage" );
123124
}
124125

126+
if ( identifier instanceof DatabaseIdentifier ) {
127+
return identifier.getText();
128+
}
129+
125130
if ( identifier.isQuoted() ) {
126131
switch ( quotedCaseStrategy ) {
127132
case UPPER: {

hibernate-core/src/main/java/org/hibernate/tool/schema/extract/internal/InformationExtractorJdbcDatabaseMetaDataImpl.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.hibernate.JDBCException;
2020
import org.hibernate.boot.model.TruthValue;
21+
import org.hibernate.boot.model.naming.DatabaseIdentifier;
2122
import org.hibernate.boot.model.naming.Identifier;
2223
import org.hibernate.boot.model.relational.QualifiedTableName;
2324
import org.hibernate.cfg.AvailableSettings;
@@ -647,6 +648,7 @@ public Iterable<ForeignKeyInformation> getForeignKeys(TableInformation tableInfo
647648
return fks;
648649
}
649650

651+
650652
private ForeignKeyBuilder generateForeignKeyBuilder(Identifier fkIdentifier) {
651653
return new ForeignKeyBuilderImpl( fkIdentifier );
652654
}
@@ -688,10 +690,10 @@ private QualifiedTableName extractKeyTableName(ResultSet resultSet, String prefi
688690
final String incomingSchemaName = resultSet.getString( prefix + "TABLE_SCHEM" );
689691
final String incomingTableName = resultSet.getString( prefix + "TABLE_NAME" );
690692

691-
return new QualifiedTableName(
692-
identifierHelper().toIdentifier( incomingCatalogName ),
693-
identifierHelper().toIdentifier( incomingSchemaName ),
694-
identifierHelper().toIdentifier( incomingTableName )
695-
);
693+
final DatabaseIdentifier catalog = DatabaseIdentifier.toIdentifier( incomingCatalogName );
694+
final DatabaseIdentifier schema = DatabaseIdentifier.toIdentifier( incomingSchemaName );
695+
final DatabaseIdentifier table = DatabaseIdentifier.toIdentifier( incomingTableName );
696+
697+
return new QualifiedTableName( catalog, schema, table );
696698
}
697699
}

0 commit comments

Comments
 (0)