Hibernate 什么时候使用双向关联合适,什么时候不合适?
让我们假设我们想要构建一个类似eBay的应用程序,其中有一个名为Hibernate 什么时候使用双向关联合适,什么时候不合适?,hibernate,orm,jpa,entity-relationship,Hibernate,Orm,Jpa,Entity Relationship,让我们假设我们想要构建一个类似eBay的应用程序,其中有一个名为Customer的实体和一个名为Order的实体 从关系的角度来看,我会将其建模为: Customer +----+-----+ | ID | ... | +----+-----+ Order +----+-------------+-----+ | ID | CUSTOMER_ID | ... | +----+-------------+-----+ 现在,当我想将其映射到JPA时,我有多种选择: 创建从订单到客户的单向多对一
Customer
的实体和一个名为Order
的实体
从关系的角度来看,我会将其建模为:
Customer
+----+-----+
| ID | ... |
+----+-----+
Order
+----+-------------+-----+
| ID | CUSTOMER_ID | ... |
+----+-------------+-----+
现在,当我想将其映射到JPA时,我有多种选择:
customer.addOrder(aNewOrder);
)customer.getOders()
,并且可以以面向对象的自然方式为客户添加新订单。缺点是为了找出下了给定订单的客户,我应该使用JPQL我说得对吗?或者是否有规则可以根据这些规则来确定给定关联的正确方向?很大程度上取决于每个客户的预期订单数量。如果您希望每个客户都有很多订单(比如eBay),那么让客户拥有与之相关联的所有订单将不是非常有效(或者需要一些努力才能保持惰性关联)。在这种情况下,我推荐方法1。写一些查询没有错 但是,如果您希望大多数客户的订单很少,那么双向方法#3就可以了
我认为#2没有多大价值,因为订单总是与一个客户关联。显然,当您需要从双方访问时,您会使用双向关系。持久性解决方案根本不应该出现在这种选择中。@DataNucleus:但最终,无论关联是双向的还是非双向的,都有可能找到客户或下了给定订单的客户的订单。当然,我的观点是,您设计的模型要适合在应用程序中的使用方式,不容纳持久层。是的,无论bidir与否,总是可以为客户或客户获取订单-您选择基于性能等获取信息的机制。好的,那么我从您和Alex所说的得出结论,基本上我们可以选择任何选项,但根据我们的使用模式和性能要求,我们可能会选择其中一种,而不是其他。换言之,似乎没有明确的规则或一个普遍“正确”的选择。