diff --git a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/HANALegacyDialect.java b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/HANALegacyDialect.java index 2f93f805a350..a2569b8f4dbf 100644 --- a/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/HANALegacyDialect.java +++ b/hibernate-community-dialects/src/main/java/org/hibernate/community/dialect/HANALegacyDialect.java @@ -935,6 +935,11 @@ public Identifier toIdentifier(String text, boolean quoted) { return normalizeQuoting( Identifier.toIdentifier( text, quoted ) ); } + @Override + public Identifier toIdentifier(String text, boolean quoted, boolean isExplicit) { + return normalizeQuoting( Identifier.toIdentifier( text, quoted, isExplicit ) ); + } + @Override public Identifier normalizeQuoting(Identifier identifier) { Identifier normalizedIdentifier = this.helper.normalizeQuoting( identifier ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java index 186fbb1da563..b28b9ad65b6d 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/internal/InFlightMetadataCollectorImpl.java @@ -900,14 +900,15 @@ public Table addTable( String name, String subselectFragment, boolean isAbstract, - MetadataBuildingContext buildingContext) { + MetadataBuildingContext buildingContext, + boolean isExplicit) { final Namespace namespace = getDatabase().locateNamespace( getDatabase().toIdentifier( catalogName ), getDatabase().toIdentifier( schemaName ) ); // annotation binding depends on the "table name" for @Subselect bindings // being set into the generated table (mainly to avoid later NPE), but for now we need to keep that :( - final Identifier logicalName = name != null ? getDatabase().toIdentifier( name ) : null; + final Identifier logicalName = name != null ? getDatabase().toIdentifier( name, isExplicit ) : null; if ( subselectFragment != null ) { return new Table( buildingContext.getCurrentContributorName(), namespace, logicalName, subselectFragment, isAbstract ); diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java index 5ff06ffcb345..e05eb4e97dff 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedColumn.java @@ -353,9 +353,10 @@ public boolean isNameDeferred() { * @return {@code true} if a name could be inferred */ boolean inferColumnNameIfPossible(String columnName, String propertyName, boolean applyNamingStrategy) { - if ( !isEmpty( columnName ) || !isEmpty( propertyName ) ) { + if ( isNotEmpty( columnName ) || isNotEmpty( propertyName ) ) { final String logicalColumnName = resolveLogicalColumnName( columnName, propertyName ); - mappingColumn.setName( processColumnName( logicalColumnName, applyNamingStrategy ) ); + mappingColumn.setName( + processColumnName( logicalColumnName, applyNamingStrategy, isNotEmpty( columnName ) ) ); return true; } else { @@ -403,11 +404,12 @@ private String applyEmbeddedColumnNaming(String inferredColumnName, ComponentPro return result; } - protected String processColumnName(String columnName, boolean applyNamingStrategy) { + protected String processColumnName(String columnName, boolean applyNamingStrategy, boolean isExplicit) { if ( applyNamingStrategy ) { final var database = getDatabase(); return getPhysicalNamingStrategy() - .toPhysicalColumnName( database.toIdentifier( columnName ), database.getJdbcEnvironment() ) + .toPhysicalColumnName( database.toIdentifier( columnName, isExplicit ), + database.getJdbcEnvironment() ) .render( database.getDialect() ); } else { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java index e5c57d18d96e..8568a2214d1b 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/AnnotatedJoinColumn.java @@ -458,7 +458,8 @@ public void overrideFromReferencedColumnIfNecessary(Column column) { @Override boolean inferColumnNameIfPossible(String columnName, String propertyName, boolean applyNamingStrategy) { if ( isNotEmpty( columnName ) ) { - getMappingColumn().setName( processColumnName( columnName, applyNamingStrategy ) ); + getMappingColumn().setName( + processColumnName( columnName, applyNamingStrategy, isNotEmpty( columnName ) ) ); return true; } else { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java index e553f89e1c2b..cc72b0f319a3 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/EntityBinder.java @@ -1760,7 +1760,8 @@ public MetadataBuildingContext getBuildingContext() { @Override public Identifier handleExplicitName(String explicitName, MetadataBuildingContext buildingContext) { - return jdbcEnvironment( buildingContext ).getIdentifierHelper().toIdentifier( explicitName ); + return jdbcEnvironment( buildingContext ).getIdentifierHelper() + .toIdentifier( explicitName, false, true ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java index b62c3d5e4542..0a7609eaad38 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/internal/TableBinder.java @@ -542,7 +542,8 @@ private static Table addTable( logicalName.render(), subselect, isAbstract, - buildingContext + buildingContext, + logicalName.isExplicit() ); } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java b/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java index c4d105c34f5f..4c753d9ce1b1 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/naming/Identifier.java @@ -23,6 +23,7 @@ public class Identifier implements Comparable { private final String text; private final boolean isQuoted; + private final boolean isExplicit; /** * Means to generate an {@link Identifier} instance from its simple text form. @@ -62,7 +63,7 @@ public static Identifier toIdentifier(String text) { * @return The identifier form, or {@code null} if text was {@code null} */ public static Identifier toIdentifier(String text, boolean quote) { - return toIdentifier( text, quote, true ); + return toIdentifier( text, quote, true, false ); } /** @@ -81,6 +82,25 @@ public static Identifier toIdentifier(String text, boolean quote) { * @return The identifier form, or {@code null} if text was {@code null} */ public static Identifier toIdentifier(String text, boolean quote, boolean autoquote) { + return toIdentifier( text, quote, autoquote, false ); + } + + /** + * Means to generate an {@link Identifier} instance from its simple text form. + *

+ * If passed {@code text} is {@code null}, {@code null} is returned. + *

+ * If passed {@code text} is surrounded in quote markers, the returned Identifier + * is considered quoted. Quote markers include back-ticks (`), double-quotes ("), + * and brackets ([ and ]). + * + * @param text The text form + * @param quote Whether to quote unquoted text forms + * @param autoquote Whether to quote the result if it contains special characters + * @param isExplicit Whether the name is explicitly set + * @return The identifier form, or {@code null} if text was {@code null} + */ + public static Identifier toIdentifier(String text, boolean quote, boolean autoquote, boolean isExplicit) { if ( isBlank( text ) ) { return null; } @@ -106,7 +126,7 @@ public static Identifier toIdentifier(String text, boolean quote, boolean autoqu else if ( autoquote && !quote ) { quote = autoquote( text, start, end ); } - return new Identifier( text.substring( start, end ), quote ); + return new Identifier( text.substring( start, end ), quote, isExplicit ); } private static boolean autoquote(String text, int start, int end) { @@ -184,6 +204,17 @@ public static String unQuote(String name) { * @param quoted Is this a quoted identifier? */ public Identifier(String text, boolean quoted) { + this( text, quoted, false ); + } + + /** + * Constructs an identifier instance. + * + * @param text The identifier text. + * @param quoted Is this a quoted identifier? + * @param isExplicit Whether the name is explicitly set + */ + public Identifier(String text, boolean quoted, boolean isExplicit) { if ( isEmpty( text ) ) { throw new IllegalIdentifierException( "Identifier text cannot be null" ); } @@ -192,6 +223,7 @@ public Identifier(String text, boolean quoted) { } this.text = text; this.isQuoted = quoted; + this.isExplicit = isExplicit; } /** @@ -202,6 +234,7 @@ public Identifier(String text, boolean quoted) { protected Identifier(String text) { this.text = text; this.isQuoted = false; + this.isExplicit = false; } /** @@ -295,4 +328,8 @@ public static boolean areEqual(Identifier id1, Identifier id2) { public static Identifier quote(Identifier identifier) { return identifier.quoted(); } + + public boolean isExplicit() { + return isExplicit; + } } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java index 23ba3cf59a64..c6e66ef366ee 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/Database.java @@ -103,7 +103,24 @@ public JdbcEnvironment getJdbcEnvironment() { * @return The wrapped Identifier form */ public Identifier toIdentifier(String text) { - return text == null ? null : jdbcEnvironment.getIdentifierHelper().toIdentifier( text ); + return toIdentifier( text, false ); + } + + /** + * Wrap the raw name of a database object in its Identifier form accounting + * for quoting from any of: + *

+ * + * @param text The raw object name + * @param isExplicit Whether the name is explicitly set + * @return The wrapped Identifier form + * @implNote Quoting from database keywords happens only when building physical identifiers. + */ + public Identifier toIdentifier(String text, boolean isExplicit) { + return text == null ? null : jdbcEnvironment.getIdentifierHelper().toIdentifier( text, false, isExplicit ); } public PhysicalNamingStrategy getPhysicalNamingStrategy() { diff --git a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedNameParser.java b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedNameParser.java index b2b735e495e7..b9c940568ba0 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedNameParser.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/model/relational/QualifiedNameParser.java @@ -110,7 +110,7 @@ public NameParts parse(String text, Identifier defaultCatalog, Identifier defaul if ( isQuotedInEntirety( text ) ) { return new NameParts( defaultCatalog, defaultSchema, - Identifier.toIdentifier( unquote( text ), true ) ); + Identifier.toIdentifier( unquote( text ), true, true, true ) ); } String catalogName = null; @@ -169,7 +169,7 @@ else if ( defaultCatalog != null ) { return new NameParts( Identifier.toIdentifier( catalogName, catalogWasQuoted ), Identifier.toIdentifier( schemaName, schemaWasQuoted ), - Identifier.toIdentifier( name, nameWasQuoted ) + Identifier.toIdentifier( name, nameWasQuoted, true, true ) ); } diff --git a/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java b/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java index fc2903a9660e..405d82711e12 100644 --- a/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java +++ b/hibernate-core/src/main/java/org/hibernate/boot/spi/InFlightMetadataCollector.java @@ -140,6 +140,7 @@ default AnnotationDescriptorRegistry getAnnotationDescriptorRegistry() { * @param subselect A select statement which defines a logical table, much * like a DB view. * @param isAbstract Is the table abstract (i.e. not really existing in the DB)? + * @param isExplicit Whether the name is explicitly set * * @return The created table metadata, or the existing reference. */ @@ -149,7 +150,8 @@ Table addTable( String name, String subselect, boolean isAbstract, - MetadataBuildingContext buildingContext); + MetadataBuildingContext buildingContext, + boolean isExplicit); /** * Adds a 'denormalized table' to this repository. diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/HANADialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/HANADialect.java index 4ff88f517c78..d23d8eaf73f9 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/HANADialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/HANADialect.java @@ -959,6 +959,11 @@ public Identifier toIdentifier(String text, boolean quoted) { return normalizeQuoting( Identifier.toIdentifier( text, quoted ) ); } + @Override + public Identifier toIdentifier(String text, boolean quoted, boolean isExplicit) { + return normalizeQuoting( Identifier.toIdentifier( text, quoted, isExplicit ) ); + } + @Override public Identifier normalizeQuoting(Identifier identifier) { Identifier normalizedIdentifier = this.helper.normalizeQuoting( identifier ); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java index f4c683fbfeb0..8ec3dcae03c0 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/internal/NormalizingIdentifierHelperImpl.java @@ -89,6 +89,11 @@ public Identifier toIdentifier(String text, boolean quoted) { return normalizeQuoting( Identifier.toIdentifier( text, quoted ) ); } + @Override + public Identifier toIdentifier(String text, boolean quoted, boolean isExplicit) { + return normalizeQuoting( Identifier.toIdentifier( text, quoted, true, isExplicit ) ); + } + @Override public Identifier applyGlobalQuoting(String text) { return Identifier.toIdentifier( text, globallyQuoteIdentifiers && !globallyQuoteIdentifiersSkipColumnDefinitions, false ); diff --git a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/IdentifierHelper.java b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/IdentifierHelper.java index 23cbb6c231dc..d5d91969e22f 100644 --- a/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/IdentifierHelper.java +++ b/hibernate-core/src/main/java/org/hibernate/engine/jdbc/env/spi/IdentifierHelper.java @@ -51,6 +51,21 @@ public interface IdentifierHelper { */ Identifier toIdentifier(String text, boolean quoted); + /** + * Generate an Identifier instance from its simple name as obtained from mapping + * information. Additionally, this form takes a boolean indicating whether to + * explicitly quote the Identifier. + *

+ * Note that Identifiers returned from here may be implicitly quoted based on + * 'globally quoted identifiers' or based on reserved words. + * + * @param text The text form of a name as obtained from mapping information. + * @param quoted Is the identifier to be quoted explicitly. + * @param isExplicit Whether the name is explicitly set + * @return The identifier form of the name. + */ + Identifier toIdentifier(String text, boolean quoted, boolean isExplicit); + /** * Intended only for use in handling quoting requirements for {@code column-definition} * as defined by {@link jakarta.persistence.Column#columnDefinition()}, diff --git a/hibernate-core/src/main/java/org/hibernate/id/enhanced/SequenceStyleGenerator.java b/hibernate-core/src/main/java/org/hibernate/id/enhanced/SequenceStyleGenerator.java index d44d65157729..2326d916d491 100644 --- a/hibernate-core/src/main/java/org/hibernate/id/enhanced/SequenceStyleGenerator.java +++ b/hibernate-core/src/main/java/org/hibernate/id/enhanced/SequenceStyleGenerator.java @@ -368,10 +368,10 @@ private static QualifiedName sequenceName( IdentifierHelper identifierHelper) { if ( isNotEmpty( explicitSequenceName ) ) { // we have an explicit name, use it - return explicitSequenceName.contains(".") + return explicitSequenceName.contains( "." ) ? QualifiedNameParser.INSTANCE.parse( explicitSequenceName ) : new QualifiedNameParser.NameParts( catalog, schema, - identifierHelper.toIdentifier( explicitSequenceName ) ); + identifierHelper.toIdentifier( explicitSequenceName, false, true ) ); } else { // otherwise, determine an implicit name to use diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/associations/ExplicitIdentifierTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/associations/ExplicitIdentifierTest.java new file mode 100644 index 000000000000..b2a19e10a61e --- /dev/null +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/associations/ExplicitIdentifierTest.java @@ -0,0 +1,167 @@ +/* + * SPDX-License-Identifier: Apache-2.0 + * Copyright Red Hat Inc. and Hibernate Authors + */ +package org.hibernate.orm.test.associations; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.Id; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; +import org.hibernate.boot.model.naming.Identifier; +import org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl; +import org.hibernate.cfg.AvailableSettings; +import org.hibernate.dialect.HSQLDialect; +import org.hibernate.engine.jdbc.env.spi.JdbcEnvironment; +import org.hibernate.testing.orm.junit.DomainModel; +import org.hibernate.testing.orm.junit.JiraKey; +import org.hibernate.testing.orm.junit.ServiceRegistry; +import org.hibernate.testing.orm.junit.SessionFactory; +import org.hibernate.testing.orm.junit.SessionFactoryScope; +import org.hibernate.testing.orm.junit.Setting; +import org.junit.jupiter.api.AfterAll; +import org.junit.jupiter.api.Test; + +import static jakarta.persistence.GenerationType.SEQUENCE; +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SessionFactory +@DomainModel(annotatedClasses = { + ExplicitIdentifierTest.PersonExplicit.class, + ExplicitIdentifierTest.PersonImplicit.class +}) +@ServiceRegistry( + settings = { + @Setting(name = AvailableSettings.PHYSICAL_NAMING_STRATEGY, + value = "org.hibernate.orm.test.associations.ExplicitIdentifierTest$CustomPhysicalNamingStrategy") + } +) +@JiraKey("HHH-14584") +public class ExplicitIdentifierTest { + + @Test + void testImplicitIdentifier(SessionFactoryScope scope) { + + // implicit named objects have a prefix + + scope.inTransaction( session -> { + PersonImplicit personImplicit = new PersonImplicit(); + personImplicit.name = "implicit"; + session.persist( personImplicit ); + } ); + + scope.inTransaction( session -> { + + assertEquals( "implicit", session.createNativeQuery( + session.getDialect() instanceof HSQLDialect ? + "select COLUMN_name from \"TABLE_`ExplicitIdentifierTest$PersonImplicit`\"" + : "select COLUMN_name from TABLE_ExplicitIdentifierTest$PersonImplicit", + String.class ) + .getSingleResult() ); + + if ( session.getDialect().getSequenceSupport().supportsSequences() ) { + assertEquals( 51, session.createNativeQuery( + session.getDialect().getSequenceSupport() + .getSequenceNextValString( session.getDialect() instanceof HSQLDialect + ? "\"SEQUENCE_`TABLE_`ExplicitIdentifierTest$PersonImplicit`_SEQ`\"" + : "SEQUENCE_TABLE_ExplicitIdentifierTest$PersonImplicit_SEQ" ), + Integer.class ).getSingleResult() ); + } + else { + assertEquals( 51, session.createNativeQuery( + "select next_val from TABLE_TABLE_ExplicitIdentifierTest$PersonImplicit_SEQ", + Integer.class ).getSingleResult() ); + } + } ); + } + + @Test + void testExplicitIdentifier(SessionFactoryScope scope) { + + // explicit named object don't have a prefix + + scope.inTransaction( session -> { + PersonExplicit personExplicit = new PersonExplicit(); + personExplicit.name = "explicit"; + session.persist( personExplicit ); + } ); + + scope.inTransaction( session -> { + + assertEquals( "explicit", session.createNativeQuery( + "select name from PersonExplicit", + String.class ) + .getSingleResult() ); + + if ( session.getDialect().getSequenceSupport().supportsSequences() ) { + assertEquals( 51, session.createNativeQuery( + session.getDialect().getSequenceSupport() + .getSequenceNextValString( "person_explicit_seq" ), + Integer.class ).getSingleResult() ); + } + else { + assertEquals( 51, session.createNativeQuery( + "select next_val from person_explicit_seq", + Integer.class ).getSingleResult() ); + } + } ); + } + + @AfterAll + public void dropTestData(SessionFactoryScope scope) { + scope.dropData(); + } + + @Entity + public static class PersonImplicit { + + @Id + @GeneratedValue + long id; + + @Column + String name; + } + + @Entity + @Table(name = "PersonExplicit") + public static class PersonExplicit { + + @Id + @GeneratedValue( + strategy = SEQUENCE, + generator = "person_sequence" + ) + @SequenceGenerator(name = "person_sequence", sequenceName = "person_explicit_seq") + long id; + + @Column(name = "name") + String name; + } + + public static class CustomPhysicalNamingStrategy extends PhysicalNamingStrategyStandardImpl { + + @Override + public Identifier toPhysicalTableName(Identifier logicalName, JdbcEnvironment jdbcEnvironment) { + return logicalName.isExplicit() ? logicalName + : jdbcEnvironment.getIdentifierHelper().toIdentifier( "TABLE_" + logicalName, + logicalName.isQuoted() ); + } + + @Override + public Identifier toPhysicalSequenceName(Identifier logicalName, JdbcEnvironment jdbcEnvironment) { + return logicalName.isExplicit() ? logicalName + : jdbcEnvironment.getIdentifierHelper().toIdentifier( "SEQUENCE_" + logicalName, + logicalName.isQuoted() ); + } + + @Override + public Identifier toPhysicalColumnName(Identifier logicalName, JdbcEnvironment jdbcEnvironment) { + return logicalName.isExplicit() ? logicalName + : jdbcEnvironment.getIdentifierHelper().toIdentifier( "COLUMN_" + logicalName, + logicalName.isQuoted() ); + } + } +} diff --git a/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java b/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java index 383bc5469938..811122c2af9d 100644 --- a/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java +++ b/hibernate-core/src/test/java/org/hibernate/orm/test/tool/schema/internal/CheckForExistingForeignKeyTest.java @@ -113,6 +113,11 @@ public Identifier toIdentifier(String text, boolean quoted) { return null; } + @Override + public Identifier toIdentifier(String text, boolean quoted, boolean isExplicit) { + return null; + } + @Override public Identifier applyGlobalQuoting(String text) { return null; diff --git a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFeatureChecks.java b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFeatureChecks.java index b6e415441cbd..a4dce1a819ed 100644 --- a/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFeatureChecks.java +++ b/hibernate-testing/src/main/java/org/hibernate/testing/orm/junit/DialectFeatureChecks.java @@ -1562,7 +1562,8 @@ public Table addTable( String name, String subselect, boolean isAbstract, - MetadataBuildingContext buildingContext) { + MetadataBuildingContext buildingContext, + boolean isExplicit) { return null; }