spring的事务到底该给dao配置还是给service配置啊
事务得跟据项目性质来细分:事务可以设置到三个层面,也不仅仅是楼主提到的那两种。
第一:web层事务,这一般是针对那些安全性要求较高的系统来说的。比例如电子商务网站。粒度小,一般系统用不着这么细。
第二:service层事务,这是一常见的事务划分, 将事业设置在业务逻辑上,只要业务逻辑出错或异常就事务回滚。粒度较小,一般推荐这种方式
第三:数据持久层数据务,也就是常说的数据库事务。这种事务在安全性方面要求低。就是给一个简单的增删改之类的操作增加事务操作。粒度大
从这个问题就能看出你对于一般web应用系统的N层架构的思路不太熟悉,
事务分为业务事务和系统事务,
业务事务也就是业务逻辑上操作的一致性,系统事务自然就是指真正的数据库事务,
spring配置事务的是为了什么进行管理,当然是为业务逻辑进行事务管理,保证业务逻辑上数据的原子性,
dao层是什么,数据访问层,是不应该包含业务逻辑的,这就是和service层的不同
service层自己就是业务逻辑层,事务的管理就是为service层上的保证,
建议朋友好好去理解下N层架构中的每一层的概念
给service层
因为一个操作可以关联到多个DAO的操作.在service层执行这些DAO操作,多DAO操作有失败全部回滚,全部成功提交.
从昨晚得到的回答是,给service层配置事务的.
楼主可能跟我有同样的疑惑,是不是看到了某些项目中,都给DAO配置了事务呢?例如在配置transactionManager的时候,是用的HibernateTransactionManager.
这个HibernateTransactionManager,我在SPING2.5的书上看到,原文如下"为保证Hibernate CRUD操作处在SPRING受管事务中,开发者需要定义一项事务管理器".用的就是我上面说的这个HibernateTransactionManager.
所以使得我疑惑了很久,直到现在也是
有高手说上面这段等于没给事务处理,但说上却说有.很疑惑.
诚如楼上诸位说的事务应该配置到Service层上,理由就是1楼所言
[quote]
spring配置事务的是为了什么进行管理,当然是为业务逻辑进行事务管理,保证业务逻辑上数据的原子性, dao层是什么,数据访问层,是不应该包含业务逻辑的,这就是和service层的不同 .[/quote]
LZ的疑惑或许来自有些系统中将Action--Service--Dao的结构简化成了Action--Dao的结构.自然在Action--Dao结构中事务只能配置到Dao上面.
抛开这些看本质,目的就是为了"为业务逻辑进行事务管理,保证业务逻辑上数据的原子性". 注意到这点就应该不疑惑了.