Need help with Hibernate? Read this first:
http://www.hibernate.org/ForumMailingli ... AskForHelp
Hibernate version: 3.0
Borland Enterprise Server 5.2.1
Oracle DB 9. something
I get mysterious results when testing transaction management in a managed (CMT) environment.
I have prepared an objectstructure which will cause an error when inserted into the database.
hibernate.cfg.xml:
Code:
<hibernate-configuration>
<session-factory>
<property name="connection.datasource">serial://datasources/driverDataSource_ELWEB_MERGE</property>
<property name="dialect">org.hibernate.dialect.Oracle9Dialect</property>
<property name="show_sql">true</property>
<property name="hibernate.transaction.manager_lookup_class">org.hibernate.transaction.BESTransactionManagerLookup </property>
<property name="hibernate.transaction.flush_before_completion">true</property>
<property name="hibernate.transaction.auto_close_session">true</property>
<property name="hibernate.connection.release_mode">auto</property>
<property name="hibernate.transaction.factory_class">org.hibernate.transaction.CMTTransactionFactory</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.session_factory_name">serial://Hibernate/SessionFactory</property>
<property name="hibernate.use_sql_comments">true</property>
<mapping resource="EnergyProfileVO.hbm.xml"/>
<mapping resource="EnergyProfileRowVO.hbm.xml"/>
</session-factory>
Code:
try
{
Session session = sessionFactory.getCurrentSession();
session.save(myObjectStructure);
}
catch (Throwable t)
{
// I never get here
}
No exception is thrown and the database get updated with parts of the objectStructure so no rollback is performed.
What am I missing? According to the ref. manual you don't need to do any transaction demarkation when using CMT.
The error in the object structure is an attribute that is null mapped to an not-null column. When I declared the attribute as not-null i the object mapping an exception was thrown and rollback performed.
But shouldn't there be an exception and rollback either way???
This exception is thrown somewhere within Hibernate I think, I haven't been able to catch it anyway.
2005-jun-20 15:22:11 org.hibernate.util.JDBCExceptionReporter logExceptions
[Mon Jun 20 15:22:11 CEST 2005] VARNING: SQL Error: 1401, SQLState: 23000
[Mon Jun 20 15:22:11 CEST 2005] 2005-jun-20 15:22:11 org.hibernate.util.JDBCExceptionReporter logExceptions
[Mon Jun 20 15:22:11 CEST 2005] ALLVARLIG: ORA-01401: inserted value too large for column
[Mon Jun 20 15:22:11 CEST 2005]
[Mon Jun 20 15:22:11 CEST 2005] 2005-jun-20 15:22:11 org.hibernate.util.JDBCExceptionReporter logExceptions
[Mon Jun 20 15:22:11 CEST 2005] VARNING: SQL Error: 1401, SQLState: 23000
[Mon Jun 20 15:22:11 CEST 2005] 2005-jun-20 15:22:11 org.hibernate.util.JDBCExceptionReporter logExceptions
[Mon Jun 20 15:22:11 CEST 2005] ALLVARLIG: ORA-01401: inserted value too large for column
[Mon Jun 20 15:22:11 CEST 2005]
[Mon Jun 20 15:22:11 CEST 2005] 2005-jun-20 15:22:11 org.hibernate.event.def.AbstractFlushingEventListener performExecutions
[Mon Jun 20 15:22:11 CEST 2005] ALLVARLIG: Could not synchronize database state with session
[Mon Jun 20 15:22:11 CEST 2005] org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.transaction.CacheSynchronization.beforeCompletion(CacheSynchronization.java:58)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.visitransact.jta.SynchronizationImpl.before_completion(SynchronizationImpl.java:63)
[Mon Jun 20 15:22:11 CEST 2005] at org.omg.CosTransactions._SynchronizationStub.before_completion(_SynchronizationStub.java:56)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.jts.Transaction.commit(Transaction.java:425)
[Mon Jun 20 15:22:11 CEST 2005] at org.omg.CosTransactions._TerminatorStub.commit(_TerminatorStub.java:27)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.jts.gen._TxStub.commit(_TxStub.java:46)
[Mon Jun 20 15:22:11 CEST 2005] at com.visigenic.services.CosTransactions.CurrentImpl.commit(CurrentImpl.java:260)
[Mon Jun 20 15:22:11 CEST 2005] at com.visigenic.services.CosTransactions.TSCurrentManager.commit(TSCurrentManager.java:87)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.visitransact.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:198)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.endGlobalTransaction(Dispatcher.java:254)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.doInvoke(Dispatcher.java:1534)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invokeSecurityCheck(Dispatcher.java:1023)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:816)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:595)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.EJBHome.dispatcherInvokeBeanMethod(EJBHome.java:55)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.EJBHome$ComponentInterfaceMethodCache.invokeDispatcherMethod(EJBHome.java:1502)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.EJBHome.invokeDispatcherMethod(EJBHome.java:34)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:416)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOAInvokeHandler.createEnergyProfile(EnergyProfileServicesPOAInvokeHandler.java:58)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOAInvokeHandler.createEnergyProfile(EnergyProfileServicesPOAInvokeHandler.java:206)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOA._invoke(EnergyProfileServicesPOA.java:81)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOA._invoke(EnergyProfileServicesPOA.java:61)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.poa.POAImpl.invoke(POAImpl.java:2693)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.poa.ActivationRecord.invoke(ActivationRecord.java:109)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.poa.ServerInterceptorManager$ARWrapper.invoke(ServerInterceptorManager.java:110)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.GIOP.GiopProtocolAdapter.doRequest(GiopProtocolAdapter.java:824)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.IIOP.ServerProtocolAdapter.doRequest(ServerProtocolAdapter.java:68)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.GIOP.GiopProtocolAdapter.dispatchMessage(GiopProtocolAdapter.java:1106)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.orb.TPDispatcherImpl$TPDispatcher.run(TPDispatcherImpl.java:106)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.orb.ThreadPool$PoolWorker.run(ThreadPool.java:76)
[Mon Jun 20 15:22:11 CEST 2005] Caused by: java.sql.BatchUpdateException: ORA-01401: inserted value too large for column
[Mon Jun 20 15:22:11 CEST 2005]
[Mon Jun 20 15:22:11 CEST 2005] at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:460)
[Mon Jun 20 15:22:11 CEST 2005] at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:4133)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
[Mon Jun 20 15:22:11 CEST 2005] ... 36 more
[Mon Jun 20 15:22:11 CEST 2005] org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.exception.ErrorCodeConverter.handledNonSpecificException(ErrorCodeConverter.java:92)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:80)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:136)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:324)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.transaction.CacheSynchronization.beforeCompletion(CacheSynchronization.java:58)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.visitransact.jta.SynchronizationImpl.before_completion(SynchronizationImpl.java:63)
[Mon Jun 20 15:22:11 CEST 2005] at org.omg.CosTransactions._SynchronizationStub.before_completion(_SynchronizationStub.java:56)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.jts.Transaction.commit(Transaction.java:425)
[Mon Jun 20 15:22:11 CEST 2005] at org.omg.CosTransactions._TerminatorStub.commit(_TerminatorStub.java:27)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.jts.gen._TxStub.commit(_TxStub.java:46)
[Mon Jun 20 15:22:11 CEST 2005] at com.visigenic.services.CosTransactions.CurrentImpl.commit(CurrentImpl.java:260)
[Mon Jun 20 15:22:11 CEST 2005] at com.visigenic.services.CosTransactions.TSCurrentManager.commit(TSCurrentManager.java:87)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.visitransact.jta.TransactionManagerImpl.commit(TransactionManagerImpl.java:198)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.endGlobalTransaction(Dispatcher.java:254)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.doInvoke(Dispatcher.java:1534)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invokeSecurityCheck(Dispatcher.java:1023)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:816)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:595)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.EJBHome.dispatcherInvokeBeanMethod(EJBHome.java:55)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.EJBHome$ComponentInterfaceMethodCache.invokeDispatcherMethod(EJBHome.java:1502)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.EJBHome.invokeDispatcherMethod(EJBHome.java:34)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.ejb.Dispatcher.invoke(Dispatcher.java:416)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOAInvokeHandler.createEnergyProfile(EnergyProfileServicesPOAInvokeHandler.java:58)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOAInvokeHandler.createEnergyProfile(EnergyProfileServicesPOAInvokeHandler.java:206)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOA._invoke(EnergyProfileServicesPOA.java:81)
[Mon Jun 20 15:22:11 CEST 2005] at se.vattenfall.elwebb.surprice.profile.EnergyProfileServicesPOA._invoke(EnergyProfileServicesPOA.java:61)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.poa.POAImpl.invoke(POAImpl.java:2693)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.poa.ActivationRecord.invoke(ActivationRecord.java:109)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.poa.ServerInterceptorManager$ARWrapper.invoke(ServerInterceptorManager.java:110)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.GIOP.GiopProtocolAdapter.doRequest(GiopProtocolAdapter.java:824)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.IIOP.ServerProtocolAdapter.doRequest(ServerProtocolAdapter.java:68)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.GIOP.GiopProtocolAdapter.dispatchMessage(GiopProtocolAdapter.java:1106)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.orb.TPDispatcherImpl$TPDispatcher.run(TPDispatcherImpl.java:106)
[Mon Jun 20 15:22:11 CEST 2005] at com.inprise.vbroker.orb.ThreadPool$PoolWorker.run(ThreadPool.java:76)
[Mon Jun 20 15:22:11 CEST 2005] Caused by: java.sql.BatchUpdateException: ORA-01401: inserted value too large for column
[Mon Jun 20 15:22:11 CEST 2005]
[Mon Jun 20 15:22:11 CEST 2005] at oracle.jdbc.dbaccess.DBError.throwBatchUpdateException(DBError.java:460)
[Mon Jun 20 15:22:11 CEST 2005] at oracle.jdbc.driver.OraclePreparedStatement.executeBatch(OraclePreparedStatement.java:4133)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
[Mon Jun 20 15:22:11 CEST 2005] at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
[Mon Jun 20 15:22:11 CEST 2005] ... 36 more