Skip to content

Commit

Permalink
Fix FlushMode
Browse files Browse the repository at this point in the history
  • Loading branch information
Naros authored and sebersole committed May 6, 2016
1 parent 1e6a601 commit affa6a0
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 16 deletions.
Expand Up @@ -150,6 +150,7 @@
*
* @author Gavin King
* @author Steve Ebersole
* @author Chris Cranford
*/
public final class SessionFactoryImpl implements SessionFactoryImplementor {
private static final CoreMessageLogger LOG = CoreLogging.messageLogger( SessionFactoryImpl.class );
Expand Down Expand Up @@ -215,7 +216,7 @@ public SessionFactoryImpl(final MetadataImplementor metadata, SessionFactoryOpti

this.name = sfName;
try {
uuid = (String) UUID_GENERATOR.generate(null, null);
uuid = (String) UUID_GENERATOR.generate( null, null );
}
catch (Exception e) {
throw new AssertionFailure("Could not generate UUID");
Expand Down Expand Up @@ -349,7 +350,7 @@ public void sessionFactoryClosed(SessionFactory factory) {

// then construct the fetch instance...
fetchProfile.addFetch( new Association( owner, mappingFetch.getAssociation() ), fetchStyle );
((Loadable) owner).registerAffectingFetchProfile( fetchProfile.getName() );
( (Loadable) owner ).registerAffectingFetchProfile( fetchProfile.getName() );
}
fetchProfiles.put( fetchProfile.getName(), fetchProfile );
}
Expand Down Expand Up @@ -551,7 +552,14 @@ private Session buildEntityManager(SynchronizationType synchronizationType, Map
else {
builder.autoJoinTransactions( false );
}
return builder.openSession();

final Session session = builder.openSession();
map.keySet().forEach ( key -> {
if ( key instanceof String ) {
session.setProperty( (String) key, map.get( key ) );
}
});
return session;
}

@Override
Expand Down
Expand Up @@ -211,6 +211,7 @@
* @author Gavin King
* @author Steve Ebersole
* @author Brett Meyer
* @author Chris Cranford
*/
public final class SessionImpl
extends AbstractSessionImpl
Expand Down Expand Up @@ -294,7 +295,7 @@ public SessionImpl(SessionFactoryImpl factory, SessionCreationOptions options) {
}

private void setDefaultProperties() {
properties.putIfAbsent( AvailableSettings.FLUSH_MODE, getHibernateFlushMode() );
properties.putIfAbsent( AvailableSettings.FLUSH_MODE, getHibernateFlushMode().name() );
properties.putIfAbsent( JPA_LOCK_SCOPE, PessimisticLockScope.EXTENDED.name() );
properties.putIfAbsent( JPA_LOCK_TIMEOUT, LockOptions.WAIT_FOREVER );
properties.putIfAbsent( JPA_SHARED_CACHE_RETRIEVE_MODE, CacheModeHelper.DEFAULT_RETRIEVE_MODE );
Expand All @@ -315,10 +316,10 @@ private void applyProperties() {

protected void applyQuerySettingsAndHints(Query query) {
if ( lockOptions.getLockMode() != LockMode.NONE ) {
query.setLockMode( getLockMode(lockOptions.getLockMode()));
query.setLockMode( getLockMode( lockOptions.getLockMode() ) );
}
Object queryTimeout;
if ( (queryTimeout = getProperties().get(QueryHints.SPEC_HINT_TIMEOUT)) != null ) {
if ( (queryTimeout = getProperties().get( QueryHints.SPEC_HINT_TIMEOUT ) ) != null ) {
query.setHint( QueryHints.SPEC_HINT_TIMEOUT, queryTimeout );
}
Object lockTimeout;
Expand Down Expand Up @@ -3172,7 +3173,7 @@ public void handlePersistenceException(PersistenceException e) {
}
catch ( Exception ne ) {
//we do not want the subsequent exception to swallow the original one
log.unableToMarkForRollbackOnPersistenceException(ne);
log.unableToMarkForRollbackOnPersistenceException( ne );
}
}

Expand Down Expand Up @@ -3687,7 +3688,7 @@ public void setProperty(String propertyName, Object value) {
applyProperties();
}
else {
log.debugf("Trying to set a property which is not supported on entity manager level");
log.debugf( "Trying to set a property which is not supported on entity manager level" );
}
}

Expand Down
Expand Up @@ -31,12 +31,10 @@
import org.hibernate.HibernateException;
import org.hibernate.LockMode;
import org.hibernate.LockOptions;
import org.hibernate.MappingException;
import org.hibernate.NonUniqueResultException;
import org.hibernate.PropertyNotFoundException;
import org.hibernate.ScrollMode;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.TypeMismatchException;
import org.hibernate.engine.query.spi.EntityGraphQueryHint;
import org.hibernate.engine.query.spi.HQLQueryPlan;
Expand All @@ -63,7 +61,6 @@
import org.hibernate.query.spi.QueryImplementor;
import org.hibernate.query.spi.QueryParameterBinding;
import org.hibernate.transform.ResultTransformer;
import org.hibernate.type.SerializableType;
import org.hibernate.type.Type;

import static org.hibernate.jpa.QueryHints.HINT_CACHEABLE;
Expand Down Expand Up @@ -144,7 +141,10 @@ public QueryImplementor setFlushMode(FlushMode flushMode) {

@Override
public FlushModeType getFlushMode() {
return FlushModeTypeHelper.getFlushModeType( flushMode );
return ( flushMode == null ?
getProducer().getFlushMode() :
FlushModeTypeHelper.getFlushModeType( flushMode )
);
}

@Override
Expand Down
Expand Up @@ -26,12 +26,11 @@

import org.hibernate.FlushMode;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.cfg.Environment;
import org.hibernate.jpa.AvailableSettings;
import org.hibernate.jpa.HibernateEntityManager;
import org.hibernate.jpa.HibernateEntityManagerFactory;
import org.hibernate.stat.Statistics;

import org.hibernate.testing.TestForIssue;
import org.junit.Test;

Expand Down Expand Up @@ -221,8 +220,8 @@ public void testFlushMode() throws Exception {
EntityManager em = getOrCreateEntityManager();
em.setFlushMode( FlushModeType.COMMIT );
assertEquals( FlushModeType.COMMIT, em.getFlushMode() );
( ( HibernateEntityManager ) em ).getSession().setFlushMode( FlushMode.ALWAYS );
assertNull( em.getFlushMode() );
( (Session) em ).setFlushMode( FlushMode.ALWAYS );
assertEquals( em.getFlushMode(), FlushModeType.AUTO );
em.close();
}

Expand Down

0 comments on commit affa6a0

Please sign in to comment.