目前我只是为了事务管理而在我的服务类中自动装配sessionfactory。我在服务中创建(hibernate)会话并基于来自DAO层的响应,执行事务提交/回滚。
我的业务逻辑要求我在单个事务中更新两个以上的数据库表。
从设计的角度来看,我对在服务层中自动连接sessionFactory持怀疑态度。
还有其他替代方法吗?
谢谢
答案 0 :(得分:2)
服务层的事务管理并不是一个糟糕的设计。如果您不想为了分离问题而在服务层中自动装配ssession工厂,您可以
答案 1 :(得分:1)
总的来说,我同意其他人说明交易通常是在服务级别上启动的(取决于您当然需要的粒度)。
然而,与此同时,我也开始将@Transactional(propagation = Propagation.MANDATORY)添加到我的DAO层(以及其他不允许启动事务但需要现有事务的层),因为它更容易检测到错误忘记在调用者中启动事务的地方(例如服务)。如果您的DAO使用强制传播进行注释,您将获得一个异常,说明在调用该方法时没有活动事务。
我还有一个集成测试,我检查所有bean(bean post processor)以获取此注释,如果在不属于服务层的bean中存在除Mandatory以外的传播的@Transactional注释,则会失败。这样我就确保我们不会在错误的层上启动事务。
答案 2 :(得分:-1)
不是这样。 Spring MVC有一个设计结构。你必须遵守这一点。 在服务层中嵌入DAO层是不正确的方法。 DAO层负责处理与事务相关的事情。 服务层将像抽象一样工作。有什么需要将它们包装成单一的?