wytten
Nov 16th, 2007, 08:43 AM
I'm trying out Spring Batch for the first time with code I downloaded this week. I'm trying to adapt the hibernate sample to some more complicated hibernate mappings, and I get the following exception.
I don't see any way to configure around this, as HibernateCursorInputSource always uses a StatelessSession, and there are no other Hibernate InputSources. Or am I missing something? Thanks.
org.hibernate.SessionException: collections cannot be fetched by a stateless session
at org.hibernate.impl.StatelessSessionImpl.initialize Collection(StatelessSessionImpl.java:304)
at org.hibernate.collection.AbstractPersistentCollect ion.forceInitialization(AbstractPersistentCollecti on.java:454)
at org.hibernate.engine.StatefulPersistenceContext.in itializeNonLazyCollections(StatefulPersistenceCont ext.java:755)
at org.hibernate.loader.Loader.doQueryAndInitializeNo nLazyCollections(Loader.java:229)
at org.hibernate.loader.Loader.loadEntity(Loader.java :1785)
at org.hibernate.loader.entity.AbstractEntityLoader.l oad(AbstractEntityLoader.java:47)
at org.hibernate.loader.entity.AbstractEntityLoader.l oad(AbstractEntityLoader.java:41)
at org.hibernate.persister.entity.AbstractEntityPersi ster.load(AbstractEntityPersister.java:2730)
at org.hibernate.impl.StatelessSessionImpl.get(Statel essSessionImpl.java:287)
at org.hibernate.impl.StatelessSessionImpl.get(Statel essSessionImpl.java:282)
at org.hibernate.impl.StatelessSessionImpl.internalLo ad(StatelessSessionImpl.java:321)
at org.hibernate.type.EntityType.resolveIdentifier(En tityType.java:266)
at org.hibernate.type.EntityType.resolve(EntityType.j ava:303)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity (TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndC ollections(Loader.java:842)
at org.hibernate.loader.Loader.loadSingleRow(Loader.j ava:276)
at org.hibernate.impl.ScrollableResultsImpl.prepareCu rrentRow(ScrollableResultsImpl.java:231)
at org.hibernate.impl.ScrollableResultsImpl.setRowNum ber(ScrollableResultsImpl.java:211)
at org.springframework.batch.io.cursor.HibernateCurso rInputSource$HibernateInputSourceTransactionSynchr onization.afterCompletion(HibernateCursorInputSour ce.java:138)
at org.springframework.transaction.support.Transactio nSynchronizationUtils.invokeAfterCompletion(Transa ctionSynchronizationUtils.java:133)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.invokeAfterCompletion(Abs tractPlatformTransactionManager.java:904)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.triggerAfterCompletion(Ab stractPlatformTransactionManager.java:879)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.processRollback(AbstractP latformTransactionManager.java:782)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.rollback(AbstractPlatform TransactionManager.java:730)
at org.springframework.transaction.support.Transactio nTemplate.rollbackOnException(TransactionTemplate. java:153)
at org.springframework.transaction.support.Transactio nTemplate.execute(TransactionTemplate.java:131)
at org.springframework.batch.execution.step.simple.Si mpleStepExecutor$1.doInIteration(SimpleStepExecuto r.java:203)
at org.springframework.batch.repeat.support.RepeatTem plate.getNextResult(RepeatTemplate.java:296)
at org.springframework.batch.repeat.support.RepeatTem plate.executeInternal(RepeatTemplate.java:195)
at org.springframework.batch.repeat.support.RepeatTem plate.iterate(RepeatTemplate.java:128)
at org.springframework.batch.execution.step.simple.Si mpleStepExecutor.process(SimpleStepExecutor.java:1 80)
at org.springframework.batch.execution.job.DefaultJob Executor.run(DefaultJobExecutor.java:97)
at org.springframework.batch.execution.launch.SimpleJ obExecutorFacade.start(SimpleJobExecutorFacade.jav a:197)
at org.springframework.batch.execution.launch.SimpleJ obLauncher.runInternal(SimpleJobLauncher.java:249)
at org.springframework.batch.execution.launch.SimpleJ obLauncher$1.run(SimpleJobLauncher.java:282)
at org.springframework.core.task.SyncTaskExecutor.exe cute(SyncTaskExecutor.java:49)
at org.springframework.batch.execution.launch.SimpleJ obLauncher.run(SimpleJobLauncher.java:279)
I don't see any way to configure around this, as HibernateCursorInputSource always uses a StatelessSession, and there are no other Hibernate InputSources. Or am I missing something? Thanks.
org.hibernate.SessionException: collections cannot be fetched by a stateless session
at org.hibernate.impl.StatelessSessionImpl.initialize Collection(StatelessSessionImpl.java:304)
at org.hibernate.collection.AbstractPersistentCollect ion.forceInitialization(AbstractPersistentCollecti on.java:454)
at org.hibernate.engine.StatefulPersistenceContext.in itializeNonLazyCollections(StatefulPersistenceCont ext.java:755)
at org.hibernate.loader.Loader.doQueryAndInitializeNo nLazyCollections(Loader.java:229)
at org.hibernate.loader.Loader.loadEntity(Loader.java :1785)
at org.hibernate.loader.entity.AbstractEntityLoader.l oad(AbstractEntityLoader.java:47)
at org.hibernate.loader.entity.AbstractEntityLoader.l oad(AbstractEntityLoader.java:41)
at org.hibernate.persister.entity.AbstractEntityPersi ster.load(AbstractEntityPersister.java:2730)
at org.hibernate.impl.StatelessSessionImpl.get(Statel essSessionImpl.java:287)
at org.hibernate.impl.StatelessSessionImpl.get(Statel essSessionImpl.java:282)
at org.hibernate.impl.StatelessSessionImpl.internalLo ad(StatelessSessionImpl.java:321)
at org.hibernate.type.EntityType.resolveIdentifier(En tityType.java:266)
at org.hibernate.type.EntityType.resolve(EntityType.j ava:303)
at org.hibernate.engine.TwoPhaseLoad.initializeEntity (TwoPhaseLoad.java:116)
at org.hibernate.loader.Loader.initializeEntitiesAndC ollections(Loader.java:842)
at org.hibernate.loader.Loader.loadSingleRow(Loader.j ava:276)
at org.hibernate.impl.ScrollableResultsImpl.prepareCu rrentRow(ScrollableResultsImpl.java:231)
at org.hibernate.impl.ScrollableResultsImpl.setRowNum ber(ScrollableResultsImpl.java:211)
at org.springframework.batch.io.cursor.HibernateCurso rInputSource$HibernateInputSourceTransactionSynchr onization.afterCompletion(HibernateCursorInputSour ce.java:138)
at org.springframework.transaction.support.Transactio nSynchronizationUtils.invokeAfterCompletion(Transa ctionSynchronizationUtils.java:133)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.invokeAfterCompletion(Abs tractPlatformTransactionManager.java:904)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.triggerAfterCompletion(Ab stractPlatformTransactionManager.java:879)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.processRollback(AbstractP latformTransactionManager.java:782)
at org.springframework.transaction.support.AbstractPl atformTransactionManager.rollback(AbstractPlatform TransactionManager.java:730)
at org.springframework.transaction.support.Transactio nTemplate.rollbackOnException(TransactionTemplate. java:153)
at org.springframework.transaction.support.Transactio nTemplate.execute(TransactionTemplate.java:131)
at org.springframework.batch.execution.step.simple.Si mpleStepExecutor$1.doInIteration(SimpleStepExecuto r.java:203)
at org.springframework.batch.repeat.support.RepeatTem plate.getNextResult(RepeatTemplate.java:296)
at org.springframework.batch.repeat.support.RepeatTem plate.executeInternal(RepeatTemplate.java:195)
at org.springframework.batch.repeat.support.RepeatTem plate.iterate(RepeatTemplate.java:128)
at org.springframework.batch.execution.step.simple.Si mpleStepExecutor.process(SimpleStepExecutor.java:1 80)
at org.springframework.batch.execution.job.DefaultJob Executor.run(DefaultJobExecutor.java:97)
at org.springframework.batch.execution.launch.SimpleJ obExecutorFacade.start(SimpleJobExecutorFacade.jav a:197)
at org.springframework.batch.execution.launch.SimpleJ obLauncher.runInternal(SimpleJobLauncher.java:249)
at org.springframework.batch.execution.launch.SimpleJ obLauncher$1.run(SimpleJobLauncher.java:282)
at org.springframework.core.task.SyncTaskExecutor.exe cute(SyncTaskExecutor.java:49)
at org.springframework.batch.execution.launch.SimpleJ obLauncher.run(SimpleJobLauncher.java:279)