diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java b/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java index 5a4396af5c64..b1aad9e41b93 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/MariaDBDialect.java @@ -12,6 +12,8 @@ import org.hibernate.boot.model.FunctionContributions; import org.hibernate.boot.model.TypeContributions; import org.hibernate.dialect.function.CommonFunctionFactory; +import org.hibernate.dialect.identity.IdentityColumnSupport; +import org.hibernate.dialect.identity.MariaDBIdentityColumnSupport; import org.hibernate.dialect.sequence.MariaDBSequenceSupport; import org.hibernate.dialect.sequence.SequenceSupport; import org.hibernate.engine.jdbc.dialect.spi.DialectResolutionInfo; @@ -253,6 +255,11 @@ public boolean supportsUpdateReturning() { return false; } + @Override + public IdentityColumnSupport getIdentityColumnSupport() { + return MariaDBIdentityColumnSupport.INSTANCE; + } + @Override public FunctionalDependencyAnalysisSupport getFunctionalDependencyAnalysisSupport() { return FunctionalDependencyAnalysisSupportImpl.TABLE_GROUP_AND_CONSTANTS; diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/identity/IdentityColumnSupport.java b/hibernate-core/src/main/java/org/hibernate/dialect/identity/IdentityColumnSupport.java index 3675e3da2fd1..f191c18de50c 100644 --- a/hibernate-core/src/main/java/org/hibernate/dialect/identity/IdentityColumnSupport.java +++ b/hibernate-core/src/main/java/org/hibernate/dialect/identity/IdentityColumnSupport.java @@ -55,7 +55,10 @@ public interface IdentityColumnSupport { * * @return The insert command with any necessary identity select * clause attached. + * + * @deprecated Use {@link #appendIdentitySelectToInsert(String, String)} instead. */ + @Deprecated( forRemoval = true, since = "6.5" ) String appendIdentitySelectToInsert(String insertString); /** diff --git a/hibernate-core/src/main/java/org/hibernate/dialect/identity/MariaDBIdentityColumnSupport.java b/hibernate-core/src/main/java/org/hibernate/dialect/identity/MariaDBIdentityColumnSupport.java new file mode 100644 index 000000000000..af76fdbe3290 --- /dev/null +++ b/hibernate-core/src/main/java/org/hibernate/dialect/identity/MariaDBIdentityColumnSupport.java @@ -0,0 +1,19 @@ +/* + * Hibernate, Relational Persistence for Idiomatic Java + * + * License: GNU Lesser General Public License (LGPL), version 2.1 or later + * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html + */ +package org.hibernate.dialect.identity; + +/** + * @author Marco Belladelli + */ +public class MariaDBIdentityColumnSupport extends MySQLIdentityColumnSupport { + public static final MariaDBIdentityColumnSupport INSTANCE = new MariaDBIdentityColumnSupport(); + + @Override + public String appendIdentitySelectToInsert(String identityColumnName, String insertString) { + return insertString + " returning " + identityColumnName; + } +} diff --git a/hibernate-core/src/main/java/org/hibernate/id/insert/InsertReturningDelegate.java b/hibernate-core/src/main/java/org/hibernate/id/insert/InsertReturningDelegate.java index 6c32f9b67d9d..3ee1229a684f 100644 --- a/hibernate-core/src/main/java/org/hibernate/id/insert/InsertReturningDelegate.java +++ b/hibernate-core/src/main/java/org/hibernate/id/insert/InsertReturningDelegate.java @@ -22,6 +22,7 @@ import org.hibernate.generator.values.GeneratedValuesMutationDelegate; import org.hibernate.generator.values.TableUpdateReturningBuilder; import org.hibernate.jdbc.Expectation; +import org.hibernate.metamodel.mapping.BasicEntityIdentifierMapping; import org.hibernate.persister.entity.EntityPersister; import org.hibernate.sql.ast.tree.expression.ColumnReference; import org.hibernate.sql.model.ast.MutatingTableReference; @@ -112,7 +113,10 @@ public JdbcValuesMappingProducer getGeneratedValuesMappingProducer() { @Override public String prepareIdentifierGeneratingInsert(String insertSQL) { - return dialect.getIdentityColumnSupport().appendIdentitySelectToInsert( insertSQL ); + return dialect.getIdentityColumnSupport().appendIdentitySelectToInsert( + ( (BasicEntityIdentifierMapping) persister.getRootEntityDescriptor().getIdentifierMapping() ).getSelectionExpression(), + insertSQL + ); } @Override diff --git a/hibernate-core/src/main/java/org/hibernate/id/insert/SybaseJConnGetGeneratedKeysDelegate.java b/hibernate-core/src/main/java/org/hibernate/id/insert/SybaseJConnGetGeneratedKeysDelegate.java index b92781bd0a92..72a05c027eba 100644 --- a/hibernate-core/src/main/java/org/hibernate/id/insert/SybaseJConnGetGeneratedKeysDelegate.java +++ b/hibernate-core/src/main/java/org/hibernate/id/insert/SybaseJConnGetGeneratedKeysDelegate.java @@ -16,6 +16,7 @@ import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.generator.EventType; import org.hibernate.generator.values.GeneratedValues; +import org.hibernate.metamodel.mapping.BasicEntityIdentifierMapping; import org.hibernate.persister.entity.EntityPersister; import static org.hibernate.generator.values.GeneratedValuesHelper.getGeneratedValues; @@ -37,7 +38,10 @@ public SybaseJConnGetGeneratedKeysDelegate(EntityPersister persister, Dialect di @Override public String prepareIdentifierGeneratingInsert(String insertSQL) { - return dialect.getIdentityColumnSupport().appendIdentitySelectToInsert( insertSQL ); + return dialect.getIdentityColumnSupport().appendIdentitySelectToInsert( + ( (BasicEntityIdentifierMapping) persister.getRootEntityDescriptor().getIdentifierMapping() ).getSelectionExpression(), + insertSQL + ); } @Override