spring中的事务处理问题
(1)在service层使用@Transactional的话,那么dao层的session为什么非得是getCurrentSession()生成呢?openSession...
(1)在service层使用@Transactional的话,那么dao层的session为什么非得是getCurrentSession()生成呢?openSession()不行吗?
(2)若在dao层使用hibernateTemplate的话,那么service层在调去dao层的方法后,还要配置aop的pointcut,给service层的方法加上事务逻辑,那么是不是事务里面套着事务呢,因为hibernateTemplate已经封装了事务了,这样会不会重复使用事务呢?
(3)如果是(2)这样,那么事务的边界在哪里呢,session又是怎么关闭的呢,hibernateTemplate封装的session和注解生成的事务的session是不是同一个session呢? 展开
(2)若在dao层使用hibernateTemplate的话,那么service层在调去dao层的方法后,还要配置aop的pointcut,给service层的方法加上事务逻辑,那么是不是事务里面套着事务呢,因为hibernateTemplate已经封装了事务了,这样会不会重复使用事务呢?
(3)如果是(2)这样,那么事务的边界在哪里呢,session又是怎么关闭的呢,hibernateTemplate封装的session和注解生成的事务的session是不是同一个session呢? 展开
1个回答
展开全部
解释一下:
问题1.既然在service层使用@Transaction,就说明使用了声明式事务管理,指定了事务边界,session的打开和关闭就必须遵循配置,而openSession,必须要写手动代码Close的,这必然与配置的自动打开和关闭向冲突。而getCurrentSession则是在事务提交是自动关闭session .
问题2,不会重复使用事务,你可以查阅文档,阅读一下事务的传播机制(Transactionpropagation)
问题1.既然在service层使用@Transaction,就说明使用了声明式事务管理,指定了事务边界,session的打开和关闭就必须遵循配置,而openSession,必须要写手动代码Close的,这必然与配置的自动打开和关闭向冲突。而getCurrentSession则是在事务提交是自动关闭session .
问题2,不会重复使用事务,你可以查阅文档,阅读一下事务的传播机制(Transactionpropagation)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询