0 0

Hibernate手动事务管理问题3

public void deleteMoreFlowCards(String[] vouNos) {
		String tempVouNos = VouNoGenerator.getString(vouNos, ",");
		
		String sql = "delete from t_flow_card  where vouNo in("+tempVouNos+")";
		String flowCardDetailSql = "delete from t_flow_card_detail where vou_no in("+tempVouNos+")";
		
		[color=red]此处使用getCurrentSession,就抱Transaction not successfully started
                  openSession和getCurrentSession的区别是,getCurrentSession提交后,session会自动关闭
                     而openSession不会,需手动提交,可和这没关系啊。[/color]		
                   Session session = getHibernateTemplate().getSessionFactory().openSession();
		//Session session = getHibernateTemplate().getSessionFactory().getCurrentSession();
		//SQLQuery sqlQuery = session.createSQLQuery(sql);
		
		Connection conn = null;
		PreparedStatement psmt=null;
		Transaction tx = null;
		
		try {
			//conn.setAutoCommit(false);
			tx = session.beginTransaction();
			conn = session.connection();
			
			psmt = conn.prepareStatement(flowCardDetailSql);
			psmt.executeUpdate();
			
			psmt = conn.prepareStatement(sql);
			psmt.executeUpdate();
System.out.println("commit"+conn.getAutoCommit());

			//conn.commit();
			tx.commit();
			
		} catch (SQLException e) {
			e.printStackTrace();
			
			if(tx != null){
				tx.rollback();
			}
			/*if(conn != null){
				try {
					conn.rollback();
				} catch (SQLException e1) {
					e1.printStackTrace();
				}
			}*/
		}finally{
			try {
				//conn.setAutoCommit(true);
				psmt.close();
				conn.close();
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			
		}
		
		//sqlQuery.executeUpdate();
		
		
		
	}




描述见红色字体

补充:Hibernate 使用jdbc进行批量删除时,事务管理是使用Connection来管理还是使用Hibernate封装好的Transaction来管理呢?请给建议。谢谢。

字不变红,再补:
此处使用getCurrentSession,就抱Transaction not successfully started
                  openSession和getCurrentSession的区别是,getCurrentSession提交后,session会自动关闭
                     而openSession不会,需手动提交,可和这没关系啊。

                   Session session = getHibernateTemplate().getSessionFactory().openSession();

问题补充:

getCurrentSession就指得到当前可用的session,如果压根就没开启事务,


我事务管理采用的spring的事务管理,不要我手动开啊,


getCurrentSession就指得到当前可用的session
,如果没有会开新的吧
2009年7月12日 11:41

3个答案 按时间排序 按投票排序

0 0

采纳的答案

这文章 说得不错
http://blog.csdn.net/LoveYouT/archive/2009/05/17/4193894.aspx

2009年7月12日 12:19
0 0

hibernate的事务管理底层还是使用Connection来管理嘛,

只不过它会推迟到最后,比如先进行脏检查等等

2009年7月12日 11:58
0 0

getCurrentSession就指得到当前可用的session,如果压根就没开启事务,自然是报Transaction not successfully started

openSession()就是明确让它启动一个事务

2009年7月12日 11:56

相关推荐

    Spring+Hibernate事务管理

    * 手动编写代码进行事务管理.(很少使用) * 声明式事务管理: * 基于TransactionProxyFactoryBean的方式.(很少使用) * 需要为每个进行事务管理的类,配置一个TransactionProxyFactoryBean进行增强. * 基于AspectJ...

    spring hibernate 事务管理学习笔记(一)

    然而,单独使用Hibernate时,事务管理往往需要手动处理,增加了复杂性。 当Spring与Hibernate整合时,Spring的事务管理可以自动地覆盖Hibernate的事务管理,实现全局的一致性。在Spring中,我们可以配置`...

    Hibernate的事务管理.doc

    总结,Hibernate的事务管理是保证数据库操作正确性和一致性的关键,理解并熟练运用事务的四大特性及不同隔离级别,能有效预防并发问题,提高系统的稳定性和可靠性。在实际开发中,根据项目需求和性能考虑,合理选择...

    SpringAOP整合Hibernate并使用事务

    将Spring与Hibernate整合并使用事务管理,能进一步提升应用的稳定性和效率。下面我们将详细讲解如何进行Spring AOP整合Hibernate以及如何在其中使用事务。 1. **Spring AOP简介** 面向切面编程(AOP)是Spring框架...

    Spring Hibernate事务实例

    编程式事务管理需要开发者手动编写事务开始、提交和回滚的代码,而声明式事务管理则通过配置来定义事务边界,更易于维护和使用。 Spring的`TransactionInterceptor`是声明式事务管理的一部分,它基于AOP来处理事务...

    Hibernate事务(源码)

    **Hibernate事务管理详解** 在Java开发中,尤其是在企业级应用中,事务管理是不可或缺的一部分。Hibernate作为一款流行的ORM(对象关系映射)框架,提供了强大的事务处理能力。本篇文章将深入探讨Hibernate中的事务...

    Could not roll back Hibernate transaction.doc

    本文详细介绍了Hibernate事务回滚失败的问题原因和解决方法,并对Hibernate的事务管理机制和事务回滚机制进行了详细说明。开发人员在使用Hibernate时,应该遵循Hibernate提供的API和事务管理机制,以确保数据库的...

    Hibernate的事务处理机制和flush方法的用法.docx

    在使用Hibernate进行数据库操作时,事务管理和`flush`方法的正确使用至关重要,因为它们直接影响到数据的一致性和安全性。在本文中,我们将深入探讨Hibernate的事务处理机制以及`flush`方法的用法,并分析为何在某些...

    spring3+hibernate4配置声明式事务管理(annotation方式)

    本实例工程展示了如何在Spring 3和Hibernate 4中使用注解进行声明式事务管理,这是一种高效且易于维护的方法。接下来,我们将详细讨论相关知识点。 1. **Spring框架**:Spring是一个全面的后端开发框架,它提供了...

    Hibernate编程式事务与Spring Aop的声明式事务(spring与hibernate集成)

    本篇文章将重点讨论如何在Spring框架中集成Hibernate,并探讨编程式事务管理和Spring AOP的声明式事务。 首先,让我们理解Spring与Hibernate的集成。为了整合这两个库,你需要在Spring配置文件中定义Hibernate的...

    Hibernate4实战 之第五部分:Hibernate的事务和并发

    - **手动事务管理**:在非托管环境(如独立的 Java 应用程序)中,需要手动管理事务。这包括启动、提交或回滚事务。 #### 五、事务隔离级别 事务隔离级别决定了事务如何与其他事务交互以及如何处理数据的一致性...

    使用代理实现Hibernate Dao层自动事务

    自动事务管理是现代应用中的一个重要特性,它使得开发者无需在每个数据库操作后手动开启和提交事务,而是由框架自动处理。在Hibernate中,我们可以利用Spring框架的AOP(面向切面编程)和Transaction Proxy来实现这...

    Hibernate数据库事务

    此外,了解不同环境下事务管理的具体实现方式有助于更好地控制应用的行为,避免潜在的数据问题。 总之,理解和掌握 Hibernate 数据库事务管理的相关知识点对于使用 Hibernate 进行数据库操作的开发者来说至关重要。

    hibernate事务管理

    在编程式事务管理中,开发者需要手动开始、提交、回滚事务。这通常通过`Session`对象的`beginTransaction()`, `commit()`, `rollback()`等方法实现。例如: ```java Session session = sessionFactory....

    spring2.5 hibernate3.2 事务

    编程式事务管理通过调用`PlatformTransactionManager`接口的方法来手动开始、提交、回滚事务。而声明式事务管理则是通过配置元数据(如XML或注解)来定义事务边界,更易于维护和使用。Spring 2.5中,声明式事务管理...

    Hibernate事务和并发控制

    本文将深入探讨Hibernate中的事务管理和并发控制。 首先,事务是数据库操作的基本单位,它保证了数据的一致性和完整性。事务有四个关键属性,即ACID(原子性、一致性、隔离性和持久性)。原子性确保事务中的所有...

    hibernate的事务核并发

    描述:本文深入解析了Hibernate框架中事务管理和并发控制的核心概念及其实现机制,基于一份详尽的“hibernate详细解析.pdf”文档,覆盖了非托管环境、JTA环境下的事务处理以及如何在不同场景下确保数据的一致性和...

    Hibernate缓存与spring事务详解

    本篇文章将深入探讨Hibernate的缓存机制和Spring的事务管理,以帮助开发者更好地理解和利用这两个强大的工具。 **一、Hibernate缓存** 1. **第一级缓存:Session缓存** - Hibernate的每个Session都有一个内置的...

    spring3hibernate4注解是事务管理

    在这种情况下,可以考虑使用编程式事务管理,即通过TransactionTemplate或PlatformTransactionManager接口手动控制事务。 总的来说,Spring3和Hibernate4结合使用注解进行事务管理,是现代Java企业应用中的常见实践...

Global site tag (gtag.js) - Google Analytics