在spring中自己控制事物,并且使用 aop 拦截事务,如果需要使用得到当前session,则需要在 hibernate 的 xml 配置文件中添加属性:
hibernate 版本若为 3.x.x
hibernate.current_thread_class=org.hibernate.context.ThreadLocalSessionContext|thread
hibernate 版本若为 4.x.x
hibernate.current_thread_class=org.hibernate.context.interl.ThreadLocalSessionContext|thread
aop 的配置:
<bean id="muser_inter" class="org.aops.MuserAdvice">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<aop:config>
<aop:pointcut expression="execution(* org.services.impl.MuserServiceImpl.login(String, String))" id="login_pointCut" />
<aop:advisor advice-ref="muser_inter" pointcut-ref="login_pointCut" />
</aop:config>
Java 代码:
package org.aops;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.hibernate.SessionFactory;
public class MuserAdvice implements MethodInterceptor {
private SessionFactory sessionFactory;
@Override
public Object invoke(MethodInvocation arg0) throws Throwable {
System.out.println("in");
sessionFactory.getCurrentSession().beginTransaction();
Object obj = arg0.proceed();
System.out.println("out");
sessionFactory.getCurrentSession().getTransaction().commit();
return obj;
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
控制台输出:
in
Hibernate:
select
muser0_.MUID as MUID1_,
muser0_.MUNAME as MUNAME1_,
muser0_.MUPWD as MUPWD1_
from
TEST.MUSER muser0_
where
muser0_.MUNAME=?
and muser0_.MUPWD=?
out
分享到:
相关推荐
在Spring框架中集成和配置Hibernate事务管理是企业级Java应用中的常见实践,它能提供高效且灵活的事务处理策略。Spring作为一款强大的依赖注入(DI)和面向切面编程(AOP)容器,能够轻松地管理和协调不同数据访问...
通过声明式事务管理,我们只需在方法上添加`@Transactional`注解,即可声明该方法在一个事务中执行。 接下来,我们将深入讨论Spring中的声明式事务管理。在Spring配置文件中,我们需要开启事务管理器,并在需要事务...
在上面的例子中,`saveUser`方法会在一个事务中执行,如果发生异常,整个事务会被回滚,确保数据的一致性。 总结一下,`Spring Hibernate事务实例`涵盖了以下核心知识点: 1. Spring框架的声明式事务管理:通过`...
总结,本项目展示了如何在Spring MVC和Hibernate环境中实现事务管理,通过MyEclipse自动生成的包和配置文件,简化了开发流程。在实际应用中,这样的整合能够提供高效且易于维护的Web应用,同时,声明式事务管理极大...
在本篇“Spring Hibernate 事务管理学习笔记(二)”中,我们将深入探讨Spring框架与Hibernate集成时如何实现高效、安全的事务管理。这是一篇关于源码分析和技术工具使用的文章,适合对Java开发和数据库操作有基础...
3. **Hibernate事务配置:**在Spring中,需要配置Hibernate SessionFactory,并将其注入到需要进行数据库操作的服务中。同时,通过`PlatformTransactionManager`接口(如HibernateTransactionManager)配置事务管理...
在`Spring_1800_Spring_Hibernate_Transaction_Annotation`这个压缩包文件中,很可能包含了使用注解方式实现Spring整合Hibernate事务处理的相关示例代码和配置文件。通过阅读和理解这些代码,你可以更好地掌握这一...
2. **Hibernate事务**: Hibernate本身也提供了一种事务管理机制,但在Spring环境中,我们通常使用Spring的事务管理器来协调。当@Transactional注解应用于方法上,Spring会在该方法执行前后自动管理事务的开始和结束...
在本系统中,Spring作为“胶水”连接各个组件,如控制层的Struts和持久层的Hibernate,使得系统模块化,易于维护和扩展。此外,Spring还提供事务管理,确保数据操作的一致性。 Struts是Java Web应用的一个MVC框架,...
本篇文章将重点讨论如何在Spring框架中集成Hibernate,并探讨编程式事务管理和Spring AOP的声明式事务。 首先,让我们理解Spring与Hibernate的集成。为了整合这两个库,你需要在Spring配置文件中定义Hibernate的...
- 在DAO层,使用Hibernate的Session和Query对象进行数据库操作,Spring会在事务的上下文中管理这些操作。 4. **测试**: - 编写测试用例,模拟正常情况和异常情况,确保事务管理能够正确地进行提交和回滚。 这个...
两个项目,一个项目是基于spring jdbc实现的分布式事务,一个是基于spring hibernate的分布式事务,hibernate项目里的applicationContext2.xml是基于mysql和mssql, applicationContext3.xml基于两个mssql, ...
本篇文章将深入探讨如何在Spring AOP中实现Hibernate事务管理,以及这一过程中的关键概念和技术细节。 首先,让我们了解什么是Spring AOP。AOP是一种编程范式,它允许程序员定义“切面”,这些切面是跨越多个对象的...
在"声明式事务控制,spring2.5+hibernate3集成源码"中,开发者可以学习如何配置Spring的事务管理器,以及如何在Hibernate的SessionFactory和SessionFactoryBuilder上使用Spring的TransactionProxyFactoryBean来创建...
本篇将详细介绍如何在Spring 3和Hibernate 4中通过注解来实现声明式事务管理。 首先,我们需要在项目中引入Spring和Hibernate的依赖库。这通常通过Maven或Gradle等构建工具完成,确保添加了相应的依赖项。 接着,...
事务在Hibernate中也很重要,因为多个数据库操作可能需要在一个事务中完成,以确保数据的一致性。Hibernate支持JDBC事务和JTA(Java Transaction API)事务,可以与Spring的事务管理机制集成,实现统一的事务策略。 ...
声明式事务管理则是通过配置来定义哪些方法需要在事务中执行,更加简洁和易于管理。 1. **Spring事务管理基础**: - Spring事务管理的核心接口包括`PlatformTransactionManager`和`TransactionDefinition`。前者...
7. **测试验证**:编写测试用例,检查在分布式事务中的正常操作和异常情况,确保事务管理的正确性。 以上就是Spring结合Druid和Hibernate,使用Atomikos实现JTA配置分布式事务的基本流程。在实际应用中,还需要考虑...
Hibernate作为持久层框架,它自身也提供了事务管理,但通常在Spring环境下,我们会让Spring接管事务,以便在整个应用中保持一致的事务策略。Spring通过JDBC的DataSourceTransactionManager或Hibernate的...