什么时候适合使用双向关联,什么时候不适合?

问题描述

| 假设我们要构建一个类似于eBay的应用程序,其中有一个名为
Customer
的实体和一个名为
Order
的实体。 从关系角度来看,我将其建模为:
Customer
+----+-----+
| ID | ... |
+----+-----+

Order
+----+-------------+-----+
| ID | CUSTOMER_ID | ... |
+----+-------------+-----+
现在,当我要将其映射到JPA时,我有多种选择: 创建从订单到客户的单向多对一关联。恕我直言,这是最接近关系模型的。缺点是,要查找给定客户的所有订单,我必须编写一个JPQL查询,因为客户对其订单一无所知。而且我不能以OO自然的方式为客户添加新订单(例如
customer.addOrder(aNewOrder);
)。 从客户到订单创建一对多关联。这样,为了查找给定客户的所有订单,我可以使用
customer.getoders()
,并且可以以OO自然的方式为客户添加新订单。缺点是,为了找出已下订单的客户,我应该使用JPQL。 创建从客户到订单的双向一对多关联。这样,我无需编写任何JPQL查询即可检索客户或已下订单的客户的所有订单。缺点是增加了维护双向关联的复杂性。 因此,对于必须使用单向关联还是双向关联为“正确”,我没有明确的论据。换句话说,在我看来,这全都归结为个人喜好和模型设计者/实施者的品味。 我是对的还是有规则可以根据它确定给定关联的正确方向?     

解决方法

        在很大程度上取决于您期望每个客户的订单数量。如果您希望每个客户有很多订单(想想eBay),那么让客户拥有与其相关联的所有订单将不是非常有效(或者需要花一些精力来保持懒惰的关联)。在这种情况下,我建议采用方法1。编写一些查询没有错。 但是,如果您期望大多数客户的订单很少,那么双向方法3会很好用。 我认为#2的价值不高,因为订单始终与一位客户相关。