java web 使用ssh框架,在service层上有@Transactional注解,即为了给service类里面的每个方法添加事务。
我现在的疑惑是,Service层中的方法调用dao层中的方法,dao层中的方法调用hibernate的API,如通过获取session,执行对应的SQL等。
在service上添加事务是利用AOP思想,在service层方法执行前已打开session,开启了事务。那再执行service层方法时又再次打开session,这应该不是同一个session,这不就矛盾了了,事务怎么添加到service层方法上来的呢?
我不知道自己哪里理解的错了或者说错了,有哪位大神知道的,给小弟指点一二,不胜感激!
我现在的疑惑是,Service层中的方法调用dao层中的方法,dao层中的方法调用hibernate的API,如通过获取session,执行对应的SQL等。
在service上添加事务是利用AOP思想,在service层方法执行前已打开session,开启了事务。那再执行service层方法时又再次打开session,这应该不是同一个session,这不就矛盾了了,事务怎么添加到service层方法上来的呢?
我不知道自己哪里理解的错了或者说错了,有哪位大神知道的,给小弟指点一二,不胜感激!
打开session
执行service层方法。
完成后,关闭session
在view的代码里一次http请求里先后调用了这两个方法?
OpenSessionInViewFilter是Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,直到这个请求结束,具体是通过一个Filter来实现的。
return sessionFactory.getCurrentSession();
}
即service层只是想办法取当前session,并不一定每次都重新打开