HHH-18642 Revert to Statement.RETURN_GENERATED_KEYS for identity only
This commit is contained in:
parent
0c8ac1c6e3
commit
735f066c3d
|
@ -1057,6 +1057,19 @@ public class DB2LegacyDialect extends Dialect {
|
||||||
return DB2IdentityColumnSupport.INSTANCE;
|
return DB2IdentityColumnSupport.INSTANCE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return {@code true} because we can use {@code select ... from new table (insert .... )}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public boolean supportsInsertReturning() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean supportsInsertReturningRowId() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean supportsValuesList() {
|
public boolean supportsValuesList() {
|
||||||
return true;
|
return true;
|
||||||
|
|
|
@ -6,9 +6,10 @@
|
||||||
*/
|
*/
|
||||||
package org.hibernate.id;
|
package org.hibernate.id;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import org.hibernate.boot.spi.SessionFactoryOptions;
|
import org.hibernate.boot.spi.SessionFactoryOptions;
|
||||||
import org.hibernate.dialect.Dialect;
|
import org.hibernate.dialect.Dialect;
|
||||||
import org.hibernate.engine.spi.SessionFactoryImplementor;
|
|
||||||
import org.hibernate.generator.OnExecutionGenerator;
|
import org.hibernate.generator.OnExecutionGenerator;
|
||||||
import org.hibernate.id.factory.spi.StandardGenerator;
|
import org.hibernate.id.factory.spi.StandardGenerator;
|
||||||
import org.hibernate.id.insert.BasicSelectingDelegate;
|
import org.hibernate.id.insert.BasicSelectingDelegate;
|
||||||
|
@ -16,6 +17,7 @@ import org.hibernate.id.insert.GetGeneratedKeysDelegate;
|
||||||
import org.hibernate.id.insert.InsertGeneratedIdentifierDelegate;
|
import org.hibernate.id.insert.InsertGeneratedIdentifierDelegate;
|
||||||
import org.hibernate.id.insert.InsertReturningDelegate;
|
import org.hibernate.id.insert.InsertReturningDelegate;
|
||||||
import org.hibernate.id.insert.UniqueKeySelectingDelegate;
|
import org.hibernate.id.insert.UniqueKeySelectingDelegate;
|
||||||
|
import org.hibernate.metamodel.mapping.ModelPart;
|
||||||
|
|
||||||
import static org.hibernate.generator.EventType.INSERT;
|
import static org.hibernate.generator.EventType.INSERT;
|
||||||
import static org.hibernate.generator.internal.NaturalIdHelper.getNaturalIdPropertyNames;
|
import static org.hibernate.generator.internal.NaturalIdHelper.getNaturalIdPropertyNames;
|
||||||
|
@ -54,11 +56,16 @@ public class IdentityGenerator
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public InsertGeneratedIdentifierDelegate getGeneratedIdentifierDelegate(PostInsertIdentityPersister persister) {
|
public InsertGeneratedIdentifierDelegate getGeneratedIdentifierDelegate(PostInsertIdentityPersister persister) {
|
||||||
final SessionFactoryImplementor factory = persister.getFactory();
|
final Dialect dialect = persister.getFactory().getJdbcServices().getDialect();
|
||||||
final Dialect dialect = factory.getJdbcServices().getDialect();
|
final SessionFactoryOptions sessionFactoryOptions = persister.getFactory().getSessionFactoryOptions();
|
||||||
|
final List<? extends ModelPart> generatedProperties = persister.getGeneratedProperties( INSERT );
|
||||||
|
if ( generatedProperties.size() == 1 && sessionFactoryOptions.isGetGeneratedKeysEnabled() ) {
|
||||||
|
// Use Connection#prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) when only retrieving identity
|
||||||
|
assert generatedProperties.get( 0 ).isEntityIdentifierMapping();
|
||||||
|
return dialect.getIdentityColumnSupport().buildGetGeneratedKeysDelegate( persister );
|
||||||
|
}
|
||||||
// Try to use generic delegates if the dialects supports them
|
// Try to use generic delegates if the dialects supports them
|
||||||
final SessionFactoryOptions sessionFactoryOptions = factory.getSessionFactoryOptions();
|
else if ( dialect.supportsInsertReturningGeneratedKeys() && sessionFactoryOptions.isGetGeneratedKeysEnabled() ) {
|
||||||
if ( dialect.supportsInsertReturningGeneratedKeys() && sessionFactoryOptions.isGetGeneratedKeysEnabled() ) {
|
|
||||||
return new GetGeneratedKeysDelegate( persister, false, INSERT );
|
return new GetGeneratedKeysDelegate( persister, false, INSERT );
|
||||||
}
|
}
|
||||||
else if ( dialect.supportsInsertReturning() && noCustomSql( persister, INSERT ) ) {
|
else if ( dialect.supportsInsertReturning() && noCustomSql( persister, INSERT ) ) {
|
||||||
|
|
Loading…
Reference in New Issue