【问题标题】:Collections in POJOsPOJO 中的集合
【发布时间】:2015-04-01 12:21:09
【问题描述】:

我正在使用不同的工具从我的数据库中生成 POJO,并注意到有些会为一对多的关系生成带有 getter 和 setter 的字段集合,而另一些则不会。

假设我有一个订单和产品表。每个订单可以有一个或多个产品。

Collection<Product> list = new ArrayList<>();
list.add(product1);
list.add(product2);

方法一:

Order order = new Order();
order.setDate(...);
orderDao.add(order);
orderDao.addProductBatch(list)

方法二:

Order order = new Order();
order.setDate(...);
order.setProductCollection(list);
orderDao.add(order);

在 add 方法中,包含一个 addProductBatch 调用。

首选哪种方法?此外,对于某些一对多的关系,在单个事务中添加多个对象永远不会发生 - 在这种情况下,您不需要这些集合中的一些 - 这是正确的吗?

【问题讨论】:

    标签: java database jpa jdbc dao


    【解决方案1】:

    这取决于DAO的实现...

    在方法 2 中,您在业务模型中构建您的订单及其产品,然后将完整且一致的订单(订单 + 产品列表)传递给 DAO 保存。事务实现在 DAO 内部。

    在方法 1 中,您调用了两次 DAO,第一次使用订单(没有产品),然后再次使用与订单相关的产品列表。这意味着,要么 DAO 是有状态的,并且当你完成设置后你有一些方法来执行事务,或者有 2 个事务。如果您是最后一个选项的情况,则数据库的一致性可能是错误的(没有任何产品的订单)。

    方法 2 肯定更好,因为它允许无状态 DAO 和干净的事务管理。

    【讨论】:

      【解决方案2】:

      我更喜欢第一种方法的变体。我们避免使用集合形式的实体和 DAO 服务之间的直接数据传输,而是更喜欢直接在实体中创建诸如 add、get、remove 之类的方法(我知道这有些违反规则)——实体生命中首先需要的所有方法都封装在实体。

      【讨论】:

        猜你喜欢
        • 2020-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2014-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多