我在HibernatedaosupportDAO类中使用Spring MVC 。在这里困惑从何处开始事务,它应该在服务层还是DAO层?
Hibernatedaosupport
我的视图与服务层交互。DAO已注入服务。
在DAO服务层体系结构中将Spring MVC与Hibernate一起使用的正确方法是什么?
恕我直言,交易应转到服务层。通常,一项业务交易包含多个查询和更新。如果@Transactional仅放置在DAO层上,则每个查询和更新将在单独的事务中运行,这实际上违反了事务的目的。
@Transactional
但是,如果服务为@Transactional,则每次数据库交互都会加入一个主要事务,该事务在Web层进入服务层时开始。请注意,在这种情况下,如果Web层运行多个服务方法,则每个方法将在单独的事务中运行(同一问题上移了一个级别)。但是放置@Transactional在Web层中可能会引入意想不到的副作用,例如N + 1问题,否则会被捕获。因此,尝试通过Web层调用的一种服务方法来保持一项业务交易。