当前位置: 首页 > 面试题库 >

Hibernate-为什么使用多对一来表示一对一?

邵宏达
2023-03-14
问题内容

我已经看到人们使用多对一映射来表示一对一关系。我也在加文·金(Gavin King)的书和文章中阅读了此内容。

例如,如果一个客户可以只有一个送货地址,而一个送货地址只能属于一个顾客,则映射为:

<class name="Customer" table="CUSTOMERS">
    ...
    <many-to-one name="shippingAddress"
                 class="Address"
                 column="SHIPPING_ADDRESS_ID"
                 cascade="save-update"
                 unique="true"/>
    ...
</class>

这本书的原因是(引用):

“您不在乎关联目标方面的内容,因此您可以将其视为 一对一的 关联,而无需涉及 很多 部分。”

我的问题是,为什么many-to-one不使用one-to-one?什么one-to-one使a成为不那么理想的选择many-to-one

谢谢。


问题答案:

有多种方法可以在数据库中实现一对一关联:可以共享主键,但也可以使用具有唯一约束的外键关系(一个表具有一个外键列,该列引用了主键。相关表)。

在后一种情况下,映射它的hibernate方式是使用many-to-one关联(允许指定外键)。

原因很简单:您不在乎关联目标方面的内容,因此您可以将其像一对一关联一样对待,而不必考虑很多部分。
您只需要表达“此实体的属性是对另一个实体的实例的引用”,并使用外键字段表示该关系。

换句话说,使用a many-to-one映射 一对一外键关联 (实际上可能比 共享主键一对一关联 更频繁)。



 类似资料:
  • 问题内容: 在本文档中(向下滚动至“单向”部分): http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#entity- mapping-association- collections 它说,与联接表进行单向一对多关联比仅在拥有实体中使用外键列更可取。我的问题是,为什么它更受欢迎? 问题答案: 考

  • 我想使用联接表在两个表之间建立一对多关系。 这就是为什么我想使用联接表: Hibernate单向一对多关联-为什么连接表更好 最后,我想使用Hibernate注释来执行此操作。 我找到了一些使用xml映射实现这一点的示例,但没有使用注释。 我相信这将是如何创建表需要

  • 我正在学习冬眠,只是有点困惑。

  • 我正在尝试编写一个简单的应用程序,其中包含一个跟踪每个用户支付的款项的表和一个包含每个用户支付的总金额(所有付款的总和)的第二个表。目前,两个表都有相同的字段(firstName、lastName、金额),我已经将它们从同一个Java类映射到多个表,我无法将该类映射到多个表。对此有什么简单的解决方案吗?

  • 问题内容: 例如,我有实体: 和实体: 现在,我需要查询所有对象,以便每个对象仅具有介于和之间的那些对象。也就是说,如果有10个具有正确日期的对象,则列表将仅包含那10个对象,仅此而已。可能吗? 提前致谢。 问题答案: 我使用@Filter解决了问题: 并将其应用于会话: 顺便说一句,在使用Hibernate时,应该使用什么查询:它是自己的机制还是“原始” SQL(例如“内部联接”)?

  • 我有两个表,ComputerNode和Connection。ComputerNode有一个主键< code>nodeid,但连接没有主键。我无法修改表模式。如果它们有一对多的关系,我应该如何创建java POJO?基本上我的目标是做一个像这样的内部连接: 下面是 SQL 表架构。计算机节点表: 连接表: 表之间的关系是一对多的。一个计算机节点可以有多个连接 我已经创建了两个Java的POJO类,但