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

Hibernate 什么时候使用双向关联合适,什么时候不合适?,hibernate,orm,jpa,entity-relationship,Hibernate,Orm,Jpa,Entity Relationship,让我们假设我们想要构建一个类似eBay的应用程序,其中有一个名为Customer的实体和一个名为Order的实体 从关系的角度来看,我会将其建模为: Customer +----+-----+ | ID | ... | +----+-----+ Order +----+-------------+-----+ | ID | CUSTOMER_ID | ... | +----+-------------+-----+ 现在,当我想将其映射到JPA时,我有多种选择: 创建从订单到客户的单向多对一

让我们假设我们想要构建一个类似eBay的应用程序,其中有一个名为
Customer
的实体和一个名为
Order
的实体

从关系的角度来看,我会将其建模为:

Customer
+----+-----+
| ID | ... |
+----+-----+

Order
+----+-------------+-----+
| ID | CUSTOMER_ID | ... |
+----+-------------+-----+
现在,当我想将其映射到JPA时,我有多种选择:

  • 创建从订单到客户的单向多对一关联。这是最接近关系模型的。缺点是,为了查找给定客户的所有订单,我必须编写一个JPQL查询,因为客户对其订单一无所知。此外,我不能以面向对象的自然方式为客户添加新订单(例如,
    customer.addOrder(aNewOrder);

  • 创建从客户到订单的一对多关联。通过这种方式,为了找到给定客户的所有订单,我可以使用
    customer.getOders()
    ,并且可以以面向对象的自然方式为客户添加新订单。缺点是为了找出下了给定订单的客户,我应该使用JPQL

  • 创建从客户到订单的双向一对多关联。这样,我就不需要编写任何JPQL查询来检索客户或下了给定订单的客户的所有订单。缺点是增加了维护双向关联的复杂性

  • 因此,对于是否必须使用单向关联或双向关联是“正确的”,我看不到明确的论据。换句话说,在我看来,这一切都归结为模型设计者/实现者的个人偏好和品味


    我说得对吗?或者是否有规则可以根据这些规则来确定给定关联的正确方向?

    很大程度上取决于每个客户的预期订单数量。如果您希望每个客户都有很多订单(比如eBay),那么让客户拥有与之相关联的所有订单将不是非常有效(或者需要一些努力才能保持惰性关联)。在这种情况下,我推荐方法1。写一些查询没有错

    但是,如果您希望大多数客户的订单很少,那么双向方法#3就可以了


    我认为#2没有多大价值,因为订单总是与一个客户关联。

    显然,当您需要从双方访问时,您会使用双向关系。持久性解决方案根本不应该出现在这种选择中。@DataNucleus:但最终,无论关联是双向的还是非双向的,都有可能找到客户或下了给定订单的客户的订单。当然,我的观点是,您设计的模型要适合在应用程序中的使用方式,不容纳持久层。是的,无论bidir与否,总是可以为客户或客户获取订单-您选择基于性能等获取信息的机制。好的,那么我从您和Alex所说的得出结论,基本上我们可以选择任何选项,但根据我们的使用模式和性能要求,我们可能会选择其中一种,而不是其他。换言之,似乎没有明确的规则或一个普遍“正确”的选择。