JDBC - 在单个事务中处理不同对象的通用方法?
JDBC - Generic way of dealing with different objects in single transaction?
所以我有对象 A
和 B
,我想在单个事务中提交给数据库。这看起来很简单,因为它只是 setAutoCommit(false)
的问题。然而,由于它们是不同的对象,它们来自不同的 类 数据库层(因此,不同的方法)。
我可以试试:
- 创建一个实例化数据库的新方法类并通过
围绕连接参数(灵感来自 this 对问题 "How to manage 2 DAO methods in a single transaction?" 的回答)。虽然我喜欢它的通用方法,但如果
dataLayerForObjectA.class
处理与 Object A
有关的查询
而 dataLayerForObjectB.class
处理 Object B
,哪里会
这个处理两者的方法属于 then?
- 采用工作单元模式,我什至不确定我是否应该这样做
首先要看这个,因为每个例子我都可以
发现都是.NET框架。我试图跟随,但意识到了
当数据到达时最终导致与上述相同的问题
数据库层。我发现的所有例子都只是在处理
同一对象的交易。
- 将任何一个中的所有内容分块,违反了设计原则
类,或为不同的组合创建新的 类
对象。我不想求助于这些。
我可能忽略了某些事情,因为大多数概念对我来说都是新的,但简而言之,这与我看到的各种方法所面临的问题相同——代码不属于现有的类 当牢记 单一职责原则 时,为不同类型的组合创建新的 类 似乎是错误的。
更新: 在 Aseem Bansal 的回答之后(目前)一切似乎都很好。如果我以后在他的方法中遇到任何问题,我会再次更新。同时,我愿意接受任何其他类型的答案。
假设您有 SalesPerson
、Customer
作为您的 A
和 B
。现在,如果你想向系统添加一个 SalesPerson
,你可以使用 salesPersonService
之类的东西,如果你想添加一个新的 customer
,那么你可以使用 customerService
这样的东西。从你的问题到这里你已经很清楚了。
现在如果要向系统添加 Order
,则需要添加两个数据库对象。
我假设您有一个单独的映射 table 来映射三个 table。可以有一个 table,但让我们用一个单独的 table 作为示例。
现在问问自己,如果您想这样做,向系统添加订单的逻辑是什么 xxxService
? ordersService
。如果那需要像
create connection
create order and order mapping
do stuff
commit/rollback
那么这是合乎逻辑的事情,所以答案是 3,但这并不违反设计原则。这是问题陈述的合理解决方案,因此不是问题。
所以我有对象 A
和 B
,我想在单个事务中提交给数据库。这看起来很简单,因为它只是 setAutoCommit(false)
的问题。然而,由于它们是不同的对象,它们来自不同的 类 数据库层(因此,不同的方法)。
我可以试试:
- 创建一个实例化数据库的新方法类并通过
围绕连接参数(灵感来自 this 对问题 "How to manage 2 DAO methods in a single transaction?" 的回答)。虽然我喜欢它的通用方法,但如果
dataLayerForObjectA.class
处理与Object A
有关的查询 而dataLayerForObjectB.class
处理Object B
,哪里会 这个处理两者的方法属于 then? - 采用工作单元模式,我什至不确定我是否应该这样做 首先要看这个,因为每个例子我都可以 发现都是.NET框架。我试图跟随,但意识到了 当数据到达时最终导致与上述相同的问题 数据库层。我发现的所有例子都只是在处理 同一对象的交易。
- 将任何一个中的所有内容分块,违反了设计原则 类,或为不同的组合创建新的 类 对象。我不想求助于这些。
我可能忽略了某些事情,因为大多数概念对我来说都是新的,但简而言之,这与我看到的各种方法所面临的问题相同——代码不属于现有的类 当牢记 单一职责原则 时,为不同类型的组合创建新的 类 似乎是错误的。
更新: 在 Aseem Bansal 的回答之后(目前)一切似乎都很好。如果我以后在他的方法中遇到任何问题,我会再次更新。同时,我愿意接受任何其他类型的答案。
假设您有 SalesPerson
、Customer
作为您的 A
和 B
。现在,如果你想向系统添加一个 SalesPerson
,你可以使用 salesPersonService
之类的东西,如果你想添加一个新的 customer
,那么你可以使用 customerService
这样的东西。从你的问题到这里你已经很清楚了。
现在如果要向系统添加 Order
,则需要添加两个数据库对象。
我假设您有一个单独的映射 table 来映射三个 table。可以有一个 table,但让我们用一个单独的 table 作为示例。
现在问问自己,如果您想这样做,向系统添加订单的逻辑是什么 xxxService
? ordersService
。如果那需要像
create connection
create order and order mapping
do stuff
commit/rollback
那么这是合乎逻辑的事情,所以答案是 3,但这并不违反设计原则。这是问题陈述的合理解决方案,因此不是问题。