Propagate read-only status through setDefaultReadOnly(true) for JPA
This involves a new ResourceTransactionDefinition variant that JpaTransactionManager indicates a transaction-local EntityManager on. HibernateJpaDialect uses this indicator for hard read-only behavior. Issue: SPR-16956
This commit is contained in:
@@ -60,7 +60,7 @@ public abstract class AbstractEntityManagerFactoryIntegrationTests {
|
||||
|
||||
protected PlatformTransactionManager transactionManager;
|
||||
|
||||
protected TransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
|
||||
protected DefaultTransactionDefinition transactionDefinition = new DefaultTransactionDefinition();
|
||||
|
||||
protected TransactionStatus transactionStatus;
|
||||
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.orm.jpa.hibernate;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import org.hibernate.FlushMode;
|
||||
import org.hibernate.Session;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.junit.Test;
|
||||
@@ -70,4 +71,16 @@ public class HibernateEntityManagerFactoryIntegrationTests extends AbstractConta
|
||||
assertSame(em.getDelegate(), proxy.getDelegate());
|
||||
}
|
||||
|
||||
@Test // SPR-16956
|
||||
public void testReadOnly() {
|
||||
assertSame(FlushMode.AUTO, sharedEntityManager.unwrap(Session.class).getHibernateFlushMode());
|
||||
assertFalse(sharedEntityManager.unwrap(Session.class).isDefaultReadOnly());
|
||||
endTransaction();
|
||||
|
||||
this.transactionDefinition.setReadOnly(true);
|
||||
startNewTransaction();
|
||||
assertSame(FlushMode.MANUAL, sharedEntityManager.unwrap(Session.class).getHibernateFlushMode());
|
||||
assertTrue(sharedEntityManager.unwrap(Session.class).isDefaultReadOnly());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ package org.springframework.orm.jpa.hibernate;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.FlushMode;
|
||||
import org.hibernate.SessionFactory;
|
||||
import org.hibernate.query.Query;
|
||||
import org.junit.Test;
|
||||
@@ -82,4 +83,16 @@ public class HibernateNativeEntityManagerFactoryIntegrationTests extends Abstrac
|
||||
assertSame(applicationContext, people.get(0).postLoaded);
|
||||
}
|
||||
|
||||
@Test // SPR-16956
|
||||
public void testReadOnly() {
|
||||
assertSame(FlushMode.AUTO, sessionFactory.getCurrentSession().getHibernateFlushMode());
|
||||
assertFalse(sessionFactory.getCurrentSession().isDefaultReadOnly());
|
||||
endTransaction();
|
||||
|
||||
this.transactionDefinition.setReadOnly(true);
|
||||
startNewTransaction();
|
||||
assertSame(FlushMode.MANUAL, sessionFactory.getCurrentSession().getHibernateFlushMode());
|
||||
assertTrue(sessionFactory.getCurrentSession().isDefaultReadOnly());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user