From 8fe16b3519b3a829d60bf0b15ed111e20006a38d Mon Sep 17 00:00:00 2001 From: Brett Meyer Date: Fri, 7 Feb 2014 11:50:27 -0500 Subject: [PATCH] HHH-8921 in-memory value generation (INSERT) only works if hibernate.id.new_generator_mappings is enabled --- .../entity/AbstractEntityPersister.java | 26 ++++++++++++------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java index f56898b01fa1..7f852fbbb746 100644 --- a/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java +++ b/hibernate-core/src/main/java/org/hibernate/persister/entity/AbstractEntityPersister.java @@ -3653,7 +3653,9 @@ else if ( ! isModifiableEntity( entry ) ) { public Serializable insert(Object[] fields, Object object, SessionImplementor session) throws HibernateException { - + // apply any pre-insert in-memory value generation + preInsertInMemoryValueGeneration( fields, object, session ); + final int span = getTableSpan(); final Serializable id; if ( entityMetamodel.isDynamicInsert() ) { @@ -3676,15 +3678,7 @@ public Serializable insert(Object[] fields, Object object, SessionImplementor se public void insert(Serializable id, Object[] fields, Object object, SessionImplementor session) { // apply any pre-insert in-memory value generation - if ( getEntityMetamodel().hasPreInsertGeneratedValues() ) { - final InMemoryValueGenerationStrategy[] strategies = getEntityMetamodel().getInMemoryValueGenerationStrategies(); - for ( int i = 0; i < strategies.length; i++ ) { - if ( strategies[i] != null && strategies[i].getGenerationTiming().includesInsert() ) { - fields[i] = strategies[i].getValueGenerator().generateValue( (Session) session, object ); - setPropertyValue( object, i, fields[i] ); - } - } - } + preInsertInMemoryValueGeneration( fields, object, session ); final int span = getTableSpan(); if ( entityMetamodel.isDynamicInsert() ) { @@ -3701,6 +3695,18 @@ public void insert(Serializable id, Object[] fields, Object object, SessionImple } } } + + private void preInsertInMemoryValueGeneration(Object[] fields, Object object, SessionImplementor session) { + if ( getEntityMetamodel().hasPreInsertGeneratedValues() ) { + final InMemoryValueGenerationStrategy[] strategies = getEntityMetamodel().getInMemoryValueGenerationStrategies(); + for ( int i = 0; i < strategies.length; i++ ) { + if ( strategies[i] != null && strategies[i].getGenerationTiming().includesInsert() ) { + fields[i] = strategies[i].getValueGenerator().generateValue( (Session) session, object ); + setPropertyValue( object, i, fields[i] ); + } + } + } + } /** * Delete an object