【发布时间】:2014-06-20 03:37:08
【问题描述】:
我的代码具有以下架构:
- 业务对象(代表业务对象 [BO])
- DataBasedModel 类(映射到数据库表)
分层架构
- DAO(将 BO 读/写到 DB,将 BO 转换为 DBModel,反之亦然)
- 每个表都有一个 DAO
- 我计划在 DAO 之上有一个管理层。Manager 将调用 DAOS。Manager 处理业务逻辑和事务
假设我有 3 个表:A、B、C
- BO:是 A_BO ,B_BO ,C_BO
- 经理:A_M、B_M、C_M
- DAO:A_DAO、B_DAO、C_DAO
BO的所有写操作都由各自的Manager处理(例如要写入A_BO,总是调用Manager A)。
对于某些操作,我需要访问多个表/BO。
例如要在 A 中插入一条记录,我需要在表 B 中检查一些内容。A 的写入由托管的 A 处理。
经理 A 可以调用 B_DAO 吗?还是应该只调用 B_Manager?并且不访问 B_DAO?
一些担忧:
如果经理调用其他经理,我不能在经理上放置@Transaction 注释,然后我需要在经理之上再增加一层。
【问题讨论】:
-
您可以将
@Transaction放在管理器方法上,即使它调用另一个管理器的@Transactional 方法。第二种方法将参与第一种方法的事务。 -
这将导致嵌套事务权限并异常失败
-
@我的问题是不是太愚蠢了?没有人回答 :(。我想知道你们的意见,因为我在 delema 中
-
除非明确使用嵌套传播模式,否则不会产生嵌套事务。此外,嵌套事务并不总是失败,如果它们总是失败,它们就不会存在。
-
如果它已经存在,我如何防止它使用相同的事务?使用propagation=Propagation.REQUIRED??
标签: java architecture