POJO中的集合

时间:2015-04-01 12:21:09

标签: java database jpa jdbc dao

我是使用不同的工具从我的数据库生成POJO,并注意到有些人会将集合生成为字段,使用getter和setter来生成一对多关系,而其他人则没有。

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

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

方法1:

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

方法2:

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

并在add方法中包含addProductBatch调用。

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

2 个答案:

答案 0 :(得分:1)

这取决于DAO的实施......

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

在方法1中,您将两次调用DAO,首先调用订单(不含产品),然后再调用与订单相关的产品列表。这意味着要么DAO是有状态的,要么在完成设置后有一些方法来执行事务,或者有2个事务。如果您是最后一个选项,则DB的一致性可能是错误的(没有任何产品的订单)。

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

答案 1 :(得分:0)

我更喜欢第一种方法的变体。我们避免以集合的形式使用实体和DAO服务之间的直接数据传输,但更喜欢创建诸如直接在实体中添加,获取和删除的方法(我知道它是违反规则的一些) - 所有首先需要的实体生命方法封装在实体。