gpt4 book ai didi

hibernate - 试图理解 ORM 中一对多关系的拥有方的重要性

转载 作者:行者123 更新时间:2023-12-04 11:58:08 25 4
gpt4 key购买 nike

尽管我的问题是专门针对使用 Hibernate 的 Play 框架中描述实体关系的方式提出的,但我确信这是一个通用概念。

当我们有一对多的关系时,我们总是被要求指定拥有方。

因此,例如,如果我们在 Person 和 PhoneNumber 之间存在一对多的关系,我们将编写这样的代码。

@Entity
class Person {
@OneToMany(mappedBy="person")
public Set<PhoneNumber> phoneNumbers;
}

@Entity
class PhoneNumber {
@ManyToOne
public Person person;
}

在上面的代码中,拥有实体是 PhoneNumber。任何一方作为拥有实体的利弊是什么?

我意识到当拥有实体是 PhoneNUMber 时,表示的关系是 ManyToOne,这不会导致连接表,而当拥有方是 Person 时,所描述的关系将是 OneToMany,在这种情况下,将创建一个关系表。

这是确定拥有方的主要原因,还是还有其他原因?

更新:
我才意识到 this thread提供了部分答案,但我希望可能还有其他要点。

最佳答案

要记住的重要一点是,拥有关系是在保存时实际保持关系的关系。举个例子:

    Person person = new Person();
PhoneNumber pn = new PhoneNumber();
pn.phone = "12345678";
person.phoneNumbers.add(pn);
session.save(person);

如果您从数据库中重新加载实体,您将看不到任何数字,则该关系实际上不会保存。要实际添加关系,您需要在所有者端设置人员(电话号码),然后保存。
    // the relation is not saved
Person loadedPerson = (Person)session.load(Person.class, person.id);
System.out.println(loadedPerson.phoneNumbers.size()); // prints 0!

pn.person = person;
session.save(pn);

loadedPerson = (Person)session.load(Person.class, person.id);
System.out.println(loadedPerson.phoneNumbers.size()); // prints 1

关于hibernate - 试图理解 ORM 中一对多关系的拥有方的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8571989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com