我使用的是spring3.2与hibernate4.2整合,写了个baseDao供其他dao继承。在spring.xml配置文件中将sessionFactory注入给我的baseDao,现在的问题就是我每次增删改都得在baseDao里获取Transaction开事物提交事物,我想把事物管理提取出去改怎么在spring配置文件中写呢?求助!!!
public boolean upload(Object object) {
// TODO Auto-generated method stub
Session session = sessionFactory.getCurrentSession();
Transaction tran = session.getTransaction();
tran.begin();
session.update(object);
tran.commit();
return true;
}
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
spring配置文件的定义:
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- 利用spring的AOP功能,即面向切面的编程,来配置事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="exeCall*" propagation="REQUIRED" />
<tx:method name="search*" propagation="REQUIRED" read-only="true" />
<!-- 只有search方法开启只读事务、exeCall方法时开启读写事务。其他方法如save,update等方法,不开启事务,由内部exeCall方法开启读写事务 -->
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut id="interceptorPointCuts"
expression="execution(* com.manager.BaseManager.*(..))" /><!-- 此处根据baseDao来自行定义 -->
<!-- 为interceptorPointCuts切入点应用txAdvice事务切面 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="interceptorPointCuts" />
</aop:config>
baseDao中的写法:
ublic Object exeCall(DbCallBackManager dbCallBackManager) throws Exception {
return dbCallBackManager.doCallBack(getSession());
}
public boolean save(final Object o) {
boolean flag = true;
try {
CtxUtils.getBaseManager().exeCall(new DbCallBackManager() {
public Object doCallBack(Session session) {
session.save(o);
return null;
}
});
} catch (Exception e) {
flag = false;
e.printStackTrace();
log.error(e.getMessage(), e);
}
return flag;
}
public Object searchObject(Class clazz, long id) {
return this.getSession().get(clazz, id);
}
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
public Session getSession() {
return this.getSessionFactory().getCurrentSession();
}
定义一个抽象接口类DbCallBackManager:
import org.hibernate.Session;
public abstract interface DbCallBackManager {
public abstract Object doCallBack(Session session);
}
HibernateTemplate.execute(new HibernateCallback() {});