|
4 | 4 | */
|
5 | 5 | package org.hibernate.id;
|
6 | 6 |
|
| 7 | +import java.util.List; |
| 8 | + |
7 | 9 | import org.hibernate.boot.spi.SessionFactoryOptions;
|
8 | 10 | import org.hibernate.dialect.Dialect;
|
9 |
| -import org.hibernate.engine.spi.SessionFactoryImplementor; |
10 | 11 | import org.hibernate.generator.OnExecutionGenerator;
|
11 | 12 | import org.hibernate.id.insert.BasicSelectingDelegate;
|
12 | 13 | import org.hibernate.id.insert.GetGeneratedKeysDelegate;
|
13 | 14 | import org.hibernate.id.insert.InsertGeneratedIdentifierDelegate;
|
14 | 15 | import org.hibernate.id.insert.InsertReturningDelegate;
|
15 | 16 | import org.hibernate.id.insert.UniqueKeySelectingDelegate;
|
| 17 | +import org.hibernate.metamodel.mapping.ModelPart; |
16 | 18 | import org.hibernate.persister.entity.EntityPersister;
|
17 | 19 |
|
18 | 20 | import static org.hibernate.generator.EventType.INSERT;
|
@@ -52,11 +54,16 @@ public String[] getReferencedColumnValues(Dialect dialect) {
|
52 | 54 |
|
53 | 55 | @Override
|
54 | 56 | public InsertGeneratedIdentifierDelegate getGeneratedIdentifierDelegate(EntityPersister persister) {
|
55 |
| - final SessionFactoryImplementor factory = persister.getFactory(); |
56 |
| - final Dialect dialect = factory.getJdbcServices().getDialect(); |
| 57 | + final Dialect dialect = persister.getFactory().getJdbcServices().getDialect(); |
| 58 | + final SessionFactoryOptions sessionFactoryOptions = persister.getFactory().getSessionFactoryOptions(); |
| 59 | + final List<? extends ModelPart> generatedProperties = persister.getGeneratedProperties( INSERT ); |
| 60 | + if ( generatedProperties.size() == 1 && sessionFactoryOptions.isGetGeneratedKeysEnabled() ) { |
| 61 | + // Use Connection#prepareStatement(sql, Statement.RETURN_GENERATED_KEYS) when only retrieving identity |
| 62 | + assert generatedProperties.get( 0 ).isEntityIdentifierMapping(); |
| 63 | + return dialect.getIdentityColumnSupport().buildGetGeneratedKeysDelegate( persister ); |
| 64 | + } |
57 | 65 | // Try to use generic delegates if the dialects supports them
|
58 |
| - final SessionFactoryOptions sessionFactoryOptions = factory.getSessionFactoryOptions(); |
59 |
| - if ( dialect.supportsInsertReturningGeneratedKeys() && sessionFactoryOptions.isGetGeneratedKeysEnabled() ) { |
| 66 | + else if ( dialect.supportsInsertReturningGeneratedKeys() && sessionFactoryOptions.isGetGeneratedKeysEnabled() ) { |
60 | 67 | return new GetGeneratedKeysDelegate( persister, false, INSERT );
|
61 | 68 | }
|
62 | 69 | else if ( dialect.supportsInsertReturning() && noCustomSql( persister, INSERT ) ) {
|
|
0 commit comments