`

org.hibernate.TransactionException: nested transactions not supported

阅读更多
使用hibernate4.3.5和spring4.0.3进行数据批量保存时出错,错误信息如下:
2014-07-25 13:44:38 [org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1]-[com.wasu.monitor.service.NewdcErrordataService.save(NewdcErrordataService.java:129)]-[ERROR] nested transactions not supported
org.hibernate.TransactionException: nested transactions not supported
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.begin(AbstractTransactionImpl.java:154)
at org.hibernate.internal.SessionImpl.beginTransaction(SessionImpl.java:1435)
at com.wasu.monitor.db.HibernateTemplate.batchSave(HibernateTemplate.java:122)
at com.wasu.monitor.service.NewdcErrordataService.save(NewdcErrordataService.java:121)
at com.wasu.monitor.service.NewdcErrordataService$$FastClassBySpringCGLIB$$ede15180.invoke(<generated>)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:711)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:644)
at com.wasu.monitor.service.NewdcErrordataService$$EnhancerBySpringCGLIB$$ac233e9a.save(<generated>)
at com.wasu.monitor.quartz.SpringQuartz.newdc_errordata_save(SpringQuartz.java:77)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.util.MethodInvoker.invoke(MethodInvoker.java:269)
at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:321)
at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:111)
at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)


提示好像是说存在事物嵌套,就是说事物至少开启了2次,于是我修改代码(即去掉事物控制代码部分)
修改前:
	@Override
	public int batchSave(List<T> ts) {

		Session session = sessionFactory.getCurrentSession();

		Transaction tx = session.beginTransaction();

		for (int i = 0; i < ts.size(); i++) {

			Object obj = ts.get(i);

			session.save(obj);

			if (i % 20 == 0) {
				session.flush();
				session.clear();
			}

		}

		session.flush();
		session.clear();

		tx.commit();

		log.info("保存了" + ts.size() + "记录");

		return ts.size();

	}

修改后:
	@Override
	public int batchSave(List<T> ts) {

		Session session = sessionFactory.getCurrentSession();

		for (int i = 0; i < ts.size(); i++) {

			Object obj = ts.get(i);

			session.save(obj);

			if (i % 20 == 0) {
				session.flush();
				session.clear();
			}

		}

		session.flush();
		session.clear();

		log.info("保存了" + ts.size() + "记录");

		return ts.size();

	}


修改后再次测试,数据成功插入!看来还真是事物嵌套造成!呵呵!
分享到:
评论

相关推荐

    ERRORLOG

    org.hibernate.TransactionException: JDBC rollback failed

    Hibernate4(关系映射-事务-原理-性能和二级缓存-最佳实践)

    3. 原理:Hibernate底层依赖于JDBC来与数据库进行交云,但它隐藏了JDBC API的复杂性。Hibernate通过使用Session和Transaction对象来管理与数据库的交互,它还提供了一个查询语言HQL用于对象查询。Hibernate的原理还...

    hibernate错误汇总

    错误九:Exception in thread "main" org.hibernate.TransactionException: nested transactions not supported 错误原因:Hibernate不支持嵌套事务,即在一个事务中开启另一个事务。这通常是由于在已经处于事务...

    Could not roll back Hibernate transaction.doc

    nested exception is org.hibernate.TransactionException: JDBC rollback failed 这表明Hibernate事务回滚操作失败,导致事务不能正确回滚。 二、问题原因 该问题的主要原因是手动对数据库做了些操作,导致...

    Hibernate配置常见错误

    错误表现:事务提交时出现“org.hibernate.TransactionException: Transaction was marked for rollback only; cannot commit”异常。 解决方案:检查事务的回滚规则,确保在try-catch块中正确处理事务。对于Spring...

    TransactionScope和分布式事务

    【分布式事务与TransactionScope详解】 分布式事务是在多台计算机或多个数据库系统间协调进行的一组操作,目的是确保跨多个资源的数据一致性。TransactionScope是.NET框架2.0引入的一个类,用于简化分布式事务的...

    前端-后端java的Util类的工具类

    │ hibernate.cfg.xml │ HibernateDaoImpl.java │ HibernateSessionFactory.java │ HibernateUtil.java │ JsonUtil.java │ list.txt │ log4j.properties │ messageResource_zh_CN.properties │ spring.xml ...

    SPRING API 2.0.CHM

    HibernateInterceptor HibernateJdbcException HibernateJdbcException HibernateJpaDialect HibernateJpaVendorAdapter HibernateObjectRetrievalFailureException HibernateObjectRetrievalFailureException...

    Hibernate3.2 官方用户手册

    ### Hibernate 3.2 官方用户手册知识点详解 #### 一、概述 Hibernate 是一款开源的对象关系映射 (ORM) 工具,用于 Java 应用程序与数据库交互。它能够将 Java 对象自动持久化到关系型数据库中,从而简化了数据访问...

    事务的使用方法

    - **PROPAGATION_NOT_SUPPORTED**:以非事务的方式执行操作,如果当前存在事务,则挂起当前的事务。 - **PROPAGATION_NEVER**:以非事务方式执行,如果当前存在事务,则抛出异常。 - **PROPAGATION_NESTED**:如果...

    spring声明式事务处理demo

    默认情况下,如果方法抛出未检查异常(继承自RuntimeException的异常)或者TransactionException,Spring会回滚事务;否则,事务会在方法结束时提交。 ```java @Service public class UserService { @...

    无处不在的Spring AOP事务及踩过的坑

    为确保事务正确回滚,可以显式地抛出`TransactionException`或者使用`@Transactional(rollbackFor = Exception.class)`。 3. **事务边界**:`@Transactional`只对被代理的方法有效。如果事务性方法内部调用了非事务...

    详细介绍Spring事务管理

    TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException; void commit(TransactionStatus status) throws TransactionException; void rollback(TransactionStatus ...

    PHP ORM(面向对象PDO数据库框架&amp;API框架)

    $result[0]) throw new TransactionException(PDO_ERROR_CODE, '更新用户失败', $result); }); echo_msg('注册成功'); //可以直接提交json,用下面方式接收 $newUser = request_object(); //$newUser = ...

    spring_aop

    public void handleException(TransactionException ex) { // 处理异常并回滚事务 } @After("execution(* com.example.service.TransactionService.*(..))") public void commitTransaction() { // 提交事务 ...

    DBFlowBasic

    protected void onRun() throws TransactionException { // 在这里执行数据库操作 User user = new User().name("Jane").email("jane@example.com"); user.save(); } @Override protected void onFinish...

    dmrkved.rar_Java_

    3. **TransactionException.java** - 这个文件可能定义了一个自定义的异常类,用于在交易过程中捕获和处理错误或异常情况。 4. **i3package-info.java** - 这个文件通常用于提供包级别的注释,可能包含了关于这个包...

Global site tag (gtag.js) - Google Analytics