当前位置: 首页 > 知识库问答 >
问题:

为什么在JPA实体关系中使用@多对一?

袁耀
2023-03-14

我的问题可能看起来很傻。我是JPA的新手,试图理解它的基本概念。我发现有一种@multi-to-one实体关系可以在那里使用。我的问题是,为什么有人想在拥有“一对多”关系的同时使用它?我的意思是,拥有后一个就足够了解关系并发送查询了,对吗?如果没有,请解释。也许我对这两种关系的看法是完全错误的。请提供一个场景作为示例,以便我更好地理解。谢谢

共有2个答案

金子平
2023-03-14

@manytone@OneToMany都属于同一概念的一部分,用于描述单个双向关系的两侧。

如果希望关系是单向的,即其中一个实体无法遍历到另一个实体,则可以使用其中一个注释。要决定哪一个,您必须决定哪一个实体应该知道关系,哪一个不应该。

但通常你想要一个双向的关系,然后你使用两者。

宗安翔
2023-03-14

用于映射集合。如果您希望这个关系是双向的,那么您需要在另一边添加一个ManyToOne映射。

使用Hibernate映射:Person N

<class name="Person">
    <id name="id" column="personId"/>
    <many-to-one name="address" column="addressId"/>
</class>

<class name="Address">
    <id name="id" column="addressId"/>
    <set name="people">
        <key column="addressId"/>
        <one-to-many class="Person"/>
    </set>
</class>

ManyToOne也可以用来映射2个对象之间的依赖关系。在这种情况下,如果您希望关系是双向的,那么您需要在另一边添加一个OneToOne映射。

使用Hibernate映射:Person 1

<class name="Person">
    <id name="id" column="personId"/>
    <many-to-one name="address" column="addressId" unique="true"/>
</class>

<class name="Address">
    <id name="id" column="addressId"/>
   <one-to-one name="person" property-ref="address"/>
</class>
 类似资料:
  • 问题内容: 问题在标题中: 如何将多对多关系表作为实体? 问题答案: 我会说,你的问题很合理。看看这个文档部分:第24章最佳实践。摘录: 不要使用外来关联映射: 真正的多对多关联的实际测试案例很少见。大多数时候,您需要存储在“链接表”中的其他信息。在这种情况下,最好将两个一对多关联用于中间链接类。实际上,大多数关联是一对多和多对一的。因此,在使用任何其他关联样式时,您应谨慎进行。 我们正在处理的方

  • 问题内容: 我正在尝试使用JPA 2.0创建具有通用关系的多态实体。应该有两个表,一个事件表和一个通知表。在这些表内是彼此相关的具体实体,如下所示: 从逻辑上讲,这应该在hibernate状态下是可能的,因为在SQL中是可能的: 这就是我所拥有的: 使用此代码,我可以持久保存并获取任何Event,Notification,LoginEvent或NotificationEvent,但是当我尝试在JP

  • 如何为这种多对多关系分配默认值?制作两个关联表->一个用于收件箱-关系,另一个用于发件箱-关系会更好吗?我该如何做到这一点?这个问题的其他解决方案? 任何帮助都非常感谢--非常感谢!

  • 问题内容: 我有一对多关系中的两个客户实体和订单实体。对于每个客户,我需要计算关联订单的数量,并按此数量对结果进行排序。在本地postgres查询中,它看起来像这样: 但是我必须使用CriteriaBuilder来执行此操作,因为此查询是使用CriteriaBuilder放入其他条件的较大代码段的一部分。在Hibernate中,我可能会使用Projections,但在JPA中找不到类似的东西。 使

  • 我正在学习JPA,我有两个实体(Customer和CheckingAccount),其中第一个实体与第二个实体有一对多关系。CheckingAccount是BankAccount类的子类。我正在使用MySQL。 我在测试程序中创建了两个支票账户,并将它们分配给我创建的一个客户。 在我持久化所有内容并检查数据库后,我希望在CheckingAccount表中看到我所做的2行,在Customer表中看到

  • 救命啊!我只在一对多关系数据库中插入POJO时遇到问题。我有POJO和误解如何插入数据库中的所有列表??? 请帮帮我伙计们!