java web 使用ssh框架,在service层上有@Transactional注解,即为了给service类里面的每个方法添加事务。
我现在的疑惑是,Service层中的方法调用dao层中的方法,dao层中的方法调用hibernate的API,如通过获取session,执行对应的SQL等。
在service上添加事务是利用AOP思想,在service层方法执行前已打开session,开启了事务。那再执行service层方法时又再次打开session,这应该不是同一个session,这不就矛盾了了,事务怎么添加到service层方法上来的呢?
我不知道自己哪里理解的错了或者说错了,有哪位大神知道的,给小弟指点一二,不胜感激!
------解决方案--------------------
一般来说
public Session getSession() {
return sessionFactory.getCurrentSession();
}
即service层只是想办法取当前session,并不一定每次都重新打开
------解决方案--------------------
楼主3是正解,在service方法中获得的是已经打开的session而不是重新打开的。