[
http://jira.jboss.com/jira/browse/JBSEAM-1745?page=comments#action_12400503 ]
Michael Youngstrom commented on JBSEAM-1745:
--------------------------------------------
I'm thinking instead of passing readOnly to the spring transaction if flushMode.Manual
is set I'm thinking of creating a custom HibernateJpaDialect for Seam that basically
nulls out prepareTransaction() since the other functions of HibernateJpaDialect may be
useful???
I'm afraid of inferring a readOnly transaction from flushMode.Manual because I think
it is common in Seam to do em.flush() within a transaction while the flushMode is manual
which could cause problems if Spring is doing other readOnly optimizations such as setting
the db connection to "readOnly".
Thoughts?
Mike
SpringTransaction fails with HibernateJpaDialect and FlushMode.MANUAL
----------------------------------------------------------------------
Key: JBSEAM-1745
URL:
http://jira.jboss.com/jira/browse/JBSEAM-1745
Project: JBoss Seam
Issue Type: Bug
Components: Spring
Reporter: Darryl Smith
Assigned To: Michael Youngstrom
When using flushMode = MANUAL with
org.springframework.orm.jpa.vendor.HibernateJpaDialect, the flushMode is changed to AUTO
when beginning transaction
SessionImpl.setFlushMode(FlushMode) line: 1286
HibernateSessionProxy.setFlushMode(FlushMode) line: 381
SeamHibernateJpaDialect(HibernateJpaDialect).beginTransaction(EntityManager,
TransactionDefinition) line: 60
JpaTransactionManager.doBegin(Object, TransactionDefinition) line: 326
JpaTransactionManager(AbstractPlatformTransactionManager).getTransaction(TransactionDefinition)
line: 350
SpringTransaction.begin() line: 74
Unless the transaction definition is set to readOnly spring will change the flushMode to
manual
HibernateJpaDialect:45
--------------------------------
public Object beginTransaction(EntityManager entityManager, TransactionDefinition
definition)
throws PersistenceException, SQLException, TransactionException {
super.beginTransaction(entityManager, definition);
Session session = getSession(entityManager);
FlushMode flushMode = session.getFlushMode();
FlushMode previousFlushMode = null;
if (definition.isReadOnly()) {
// We should suppress flushing for a read-only transaction.
session.setFlushMode(FlushMode.MANUAL);
previousFlushMode = flushMode;
}
else {
// We need AUTO or COMMIT for a non-read-only transaction.
if (flushMode.lessThan(FlushMode.COMMIT)) {
session.setFlushMode(FlushMode.AUTO);
previousFlushMode = flushMode;
}
}
return new SessionTransactionData(session, previousFlushMode);
}
Perhaps SpringTransaction should set should pass readOnly transaction def to Spring when
the flushMode is manual.
Current Workaround: use DefaultJpaDialect
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira