spring3与hibernate4的整合

时间:2025-03-19 11:04:09

如果通过Spring来管理相应的SessionFactory,不再使用()开启session,而应该是一来打开Session,这个Session就会被Spring所管理,此时开发人员不用进行事务控制,也不用关闭Session,全部有Spring容器来完成
只有配置了事务处理之后,Spring才能有效的管理事务
<!-- 配置Spring的事务处理 -->
<!-- 创建事务管理器-->
<bean 
class=".">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 配置AOP,Spring是通过AOP来进行事务管理的 -->
<aop:config>
<!-- 设置pointCut表示哪些方法要加入事务处理 -->
<aop:pointcut 
expression="execution(* .*.*(..))" />
<!-- 通过advisor来确定具体要加入事务控制的方法 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="allMethods" />
</aop:config>
<!-- 配置哪些方法要加入事务控制 -->
<tx:advice  transaction-manager="txManager">
<tx:attributes>
<!-- 让所有的方法都加入事务管理 -->
<tx:method name="*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
    


 也可通过注解的方式实现事务管理:
       
       
<tx:annotation-driven transaction-manager="transactionManager" /> <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"> </span>

        在要进行事务管理的类和方法中分别添加如下注解:
       
 
@Transactional
public class BaseDao<T,PK extends Serializable> implements IBaseDao<T, PK>

 @Override
@Transactional(propagation=,readOnly=true)
public List<T> list(String sql, Object... args) {
Query query=().createQuery(sql);
if(args!=null){
for(int i=0;i<;i++){
(i, args[i]);
}
}
return ();
}

@Override
@Transactional(propagation=,readOnly=true)
public T findById(PK id) {
return (T)().get(clazz, id);
}

@Override
@Transactional(propagation=)
public void save(T t) {
().save(t);
}

  
OpenSessionInViewer也要改成基于4的版本

<filter>
<filter-name>openSessionInViewerFilter</filter-name>
<filter-class>.</filter-class> 
 </filter>


相关文章