JDBC - 在单个事务中处理不同对象的通用方法?

时间:2016-02-07 16:16:09

标签: java jdbc transactions

所以我想要在单个事务中提交数据库的对象AB。这似乎很容易,因为它只是setAutoCommit(false)的问题。但是,由于它们是不同的对象,因此它们来自数据库层的不同类(因此,不同的方法)。

我可以试试:

  1. 创建一个实例化数据库类并传递的新方法 围绕连接参数(受this启发回答问题“如何在单个事务中管理2个DAO方法?”)。虽然我喜欢它的通用方法,但如果 dataLayerForObjectA.class处理与Object A相关的查询 虽然dataLayerForObjectB.class处理Object B,但会在哪里处理/Content/kendo/2015.2.902/kendo.silver.min.css 处理这两者的方法属于那个?
  2. 采用工作单元模式,我甚至不确定是否应该这样做 首先要看这个,因为每个例子我都可以 找到所有的.NET框架。我试着跟着,但意识到了 当数据到达时,最终会导致与上述相同的问题 数据库层。我发现的所有例子都只是处理 同一个对象的交易。
  3. 通过分割其中任何一个中的所有内容来违反设计原则 类,或为不同的组合创建新类 对象。我不想诉诸这些。
  4. 我可能忽略了某些事情,因为大多数概念对我来说都是新的,但简而言之,这与我所看到的各种方法面临同样的问题 - 代码不属于现有的类牢记单一责任原则,并且为不同类型的组合创建新类似乎是错误的。

    更新:在Aseem Bansal的回答之后,事情似乎很好(现在)。如果我将来遇到任何问题,他会再次更新。与此同时,我对任何其他类型的答案持开放态度。

1 个答案:

答案 0 :(得分:0)

假设您有SalesPersonCustomer作为AB。现在,如果您想在系统中添加SalesPerson,可以使用salesPersonService之类的内容,如果您想添加新的customer,则可以使用customerService之类的内容。从你的问题来看,你一直很清楚。

现在,如果要向系统添加Order,则需要添加两个数据库对象。

我假设你有一个单独的映射表来映射三个表。可以有一个表,但我们的例子就是单独的表。

现在问问自己是否要这样做,为系统添加订单的逻辑xxxService是什么? ordersService。如果需要像

那样的话
create connection
create order and order mapping
do stuff
commit/rollback

然后这是合乎逻辑的事情,所以答案是3,但这并不违反设计原则。它是问题陈述的合理解决方案,因此不是问题。