HHH-8921 in-memory value generation (INSERT) only works if

hibernate.id.new_generator_mappings is enabled
This commit is contained in:
Brett Meyer 2014-02-07 11:50:27 -05:00
parent 66392f19d0
commit 8fe16b3519
1 changed files with 16 additions and 10 deletions

View File

@ -3653,6 +3653,8 @@ public abstract class AbstractEntityPersister
public Serializable insert(Object[] fields, Object object, SessionImplementor session) public Serializable insert(Object[] fields, Object object, SessionImplementor session)
throws HibernateException { throws HibernateException {
// apply any pre-insert in-memory value generation
preInsertInMemoryValueGeneration( fields, object, session );
final int span = getTableSpan(); final int span = getTableSpan();
final Serializable id; final Serializable id;
@ -3676,15 +3678,7 @@ public abstract class AbstractEntityPersister
public void insert(Serializable id, Object[] fields, Object object, SessionImplementor session) { public void insert(Serializable id, Object[] fields, Object object, SessionImplementor session) {
// apply any pre-insert in-memory value generation // apply any pre-insert in-memory value generation
if ( getEntityMetamodel().hasPreInsertGeneratedValues() ) { preInsertInMemoryValueGeneration( fields, object, session );
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] );
}
}
}
final int span = getTableSpan(); final int span = getTableSpan();
if ( entityMetamodel.isDynamicInsert() ) { if ( entityMetamodel.isDynamicInsert() ) {
@ -3702,6 +3696,18 @@ public abstract class AbstractEntityPersister
} }
} }
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 * Delete an object
*/ */