Hi,
I have a problem with transaction and session. I need to copy some data from original table to archive table by event/listener with hibernate. When I want to do update in my update listener, I've got error: index out of boun exception that occurs in transaction.commit() line in my listener. Do you have any idea how to manage correctly transaction and session in hibernate events/listeners??
Hibernate Version:
3.2
Main class code:
Session sess2 = XHibernate.getSession();
Transaction tx = sess2.beginTransaction();
Accounts acc = (Accounts) sess2.load(Accounts.class, "PIERWSZE");
Accounts acc1 = (Accounts) sess2.load(Accounts.class, "DRUGIE");
Accounts acc2 = (Accounts) sess2.load(Accounts.class, "TRZECIE");
Accounts acc3 = (Accounts) sess2.load(Accounts.class, "CZWARTE");
logger.info("Przed update");
acc.setUserId("11111113111");
acc.setDescr("11111113111");
sess2.update(acc);
acc3.setUserId("111113111");
acc3.setDescr("111113111");
sess2.update(acc3);
acc2.setUserId("5555555555");
acc2.setDescr("6666666666");
sess2.update(acc2);
logger.info("Po update");
tx.commit();
sess2.close();
Listener/event code
try{
Session sess = XHibernate.getSession();
sess.getTransaction();
AccountsAr accAr = new AccountsAr();
Accounts acc = (Accounts) entity;
accAr.setAccNumber(id.toString());
accAr = (AccountsAr) mp.mapObjectsFields(accAr, previousState, propertyNames);
accAr.setModType("U");
sess.save(accAr);
sess.getTransaction().commit();
Session ses2 = XHibernate.getSession();
ses2.beginTransaction();
acc.setModDate(accAr.getModArDate());
ses2.update(acc);
ses2.getTransaction().commit();
} catch (SecurityException e) {
logger.error(e);
e.printStackTrace();
}
Full stack trace of any exception that occurs:
---- 3688 [main] INFO org.hibernate.cfg.SettingsFactory - Statistics: disabled
---- 3688 [main] INFO org.hibernate.cfg.SettingsFactory - Deleted entity synthetic identifier rollback: disabled
---- 3688 [main] INFO org.hibernate.cfg.SettingsFactory - Default entity-mode: pojo
---- 3735 [main] INFO org.hibernate.impl.SessionFactoryImpl - building session factory
---- 4954 [main] INFO org.hibernate.impl.SessionFactoryObjectFactory - Not binding factory to JNDI, no JNDI name configured
---- 5032 [main] INFO com.newitech.provisions.test.junit.GlobalTests - Przed update
Hibernate: select accounts0_.ACC_NUMBER as ACC1_21_0_, accounts0_.MOD_DATE as MOD2_21_0_, accounts0_.FK_USER_ID as FK3_21_0_, accounts0_.CR_DATE as CR4_21_0_, accounts0_.DESCR as DESCR21_0_ from PVN_ACCOUNTS accounts0_ where accounts0_.ACC_NUMBER=?
Hibernate: select accounts0_.ACC_NUMBER as ACC1_21_0_, accounts0_.MOD_DATE as MOD2_21_0_, accounts0_.FK_USER_ID as FK3_21_0_, accounts0_.CR_DATE as CR4_21_0_, accounts0_.DESCR as DESCR21_0_ from PVN_ACCOUNTS accounts0_ where accounts0_.ACC_NUMBER=?
---- 5110 [main] INFO com.newitech.provisions.test.junit.GlobalTests - Po update
Hibernate: update PVN_ACCOUNTS set MOD_DATE=?, FK_USER_ID=?, CR_DATE=?, DESCR=? where ACC_NUMBER=?
Hibernate: insert into PVN_ACCOUNTS_AR (MOD_DATE, MOD_TYPE, MOD_BY_USER_ID, FK_USER_ID, CR_DATE, DESCR, ACCOUNT_NUMBER, MOD_AR_DATE) values (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update PVN_ACCOUNTS set MOD_DATE=?, FK_USER_ID=?, CR_DATE=?, DESCR=? where ACC_NUMBER=?
---- 5204 [main] INFO com.newitech.provisions.bl.interceptor.ProvPostUpdateEventListener - Mapowanie juz zostalo wykonane
Hibernate: update PVN_ACCOUNTS set MOD_DATE=?, FK_USER_ID=?, CR_DATE=?, DESCR=? where ACC_NUMBER=?
Hibernate: insert into PVN_ACCOUNTS_AR (MOD_DATE, MOD_TYPE, MOD_BY_USER_ID, FK_USER_ID, CR_DATE, DESCR, ACCOUNT_NUMBER, MOD_AR_DATE) values (?, ?, ?, ?, ?, ?, ?, ?)
Hibernate: update PVN_ACCOUNTS set MOD_DATE=?, FK_USER_ID=?, CR_DATE=?, DESCR=? where ACC_NUMBER=?
---- 5219 [main] INFO com.newitech.provisions.bl.interceptor.ProvPostUpdateEventListener - Mapowanie juz zostalo wykonane
Hibernate: update PVN_ACCOUNTS set MOD_DATE=?, FK_USER_ID=?, CR_DATE=?, DESCR=? where ACC_NUMBER=?
---- 5219 [main] INFO com.newitech.provisions.bl.interceptor.ProvPostUpdateEventListener - Mapowanie juz zostalo wykonane
Hibernate: update PVN_ACCOUNTS set MOD_DATE=?, FK_USER_ID=?, CR_DATE=?, DESCR=? where ACC_NUMBER=?
---- 5219 [main] INFO com.newitech.provisions.bl.interceptor.ProvPostUpdateEventListener - Mapowanie juz zostalo wykonane
Hibernate: update PVN_ACCOUNTS set MOD_DATE=?, FK_USER_ID=?, CR_DATE=?, DESCR=? where ACC_NUMBER=?
---- 5282 [main] INFO com.newitech.provisions.bl.interceptor.ProvPostUpdateEventListener - Mapowanie juz zostalo wykonane
java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.newitech.provisions.bl.interceptor.ProvPostUpdateEventListener.onPostUpdate(ProvPostUpdateEventListener.java:87)
at org.hibernate.action.EntityUpdateAction.postUpdate(EntityUpdateAction.java:183)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:162)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:248)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.newitech.provisions.test.junit.GlobalTests.testUtil(GlobalTests.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:228)
at junit.framework.TestSuite.run(TestSuite.java:223)
at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
java.lang.IndexOutOfBoundsException: Index: 1, Size: 0
at java.util.ArrayList.RangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:232)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:140)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:298)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1000)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:338)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:106)
at com.newitech.provisions.test.junit.GlobalTests.testUtil(GlobalTests.java:94)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at junit.framework.TestCase.runTest(TestCase.java:164)
at junit.framework.TestCase.runBare(TestCase.java:130)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:120)
at junit.framework.TestSuite.runTest(TestSuite.java:228)
at junit.framework.TestSuite.run(TestSuite.java:223)
at org.junit.internal.runners.OldTestClassRunner.run(OldTestClassRunner.java:35)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:38)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
---- 5329 [main] ERROR com.newitech.provisions.bl.interceptor.ProvPostUpdateEventListener - java.lang.IndexOutOfBoundsException: Index: 2, Size: 0
_________________ The spoon does not exsist
|