我正在尝试使用命令模式允许我的 Web 层在单个事务上下文中使用 Hibernate 实体(从而避免延迟加载异常)。然而,我现在对如何处理交易感到困惑。
我的命令调用带有 @Transactional
注释的服务层方法。其中一些服务层方法是只读的,例如 @Transactional(readOnly = true)
,还有一些是读/写的。
我的服务层公开了一个命令处理程序,它执行代表 Web 层传递给它的命令。
@Transactional
public Command handle(Command cmd) throws CommandException
我认为使命令处理程序的 handle
方法成为事务性的方法是正确的。这就是混淆的地方。如果命令的实现对多个服务层方法进行调用,那么命令处理程序就无法知道在命令中调用的操作是只读、读/写还是两者的组合。
我不明白在这个例子中传播是如何工作的。如果我使用 handle()
方法 readOnly = true
,那么如果命令然后调用用 @Transactional(realOnly = false)
注释的服务层方法会发生什么?