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