gpt4 book ai didi

java - Hibernate集合持久化

转载 作者:行者123 更新时间:2023-12-01 16:29:49 25 4
gpt4 key购买 nike

在浏览 Hibernate 文档时,我遇到了这样的声明:“两个实体不能共享对同一集合实例的引用”,但是当我使用下面的代码时,没有发生错误。

一切正常,包括实体和数据库中相应集合引用的 Hibernate 持久性,没有任何问题。

我是不是误会了什么?这个说法能解释一下吗?适用于什么场景?

实体1:

public class Person {
@Id
@GeneratedValue
private Long id;

@CreationTimestamp
private LocalDateTime date;

@ElementCollection
private List<String> phones = new ArrayList<>();

@ElementCollection
private Set<LocalDateTime> personOrderDates;
}

实体2:

public class Home {
@Id
@GeneratedValue
private long id;


@ElementCollection
private List<String> homePhoneList;
}

Hibernate 持久化代码:

Person person1 = entityManager.find(Person.class, 48l);
Person person2 = entityManager.find(Person.class, 49l);

List<String> newPhoneList = new ArrayList();
newPhoneList.add("x");
newPhoneList.add("y");
newPhoneList.add("z");

person1.setPhones(newPhoneList);
person2.setPhones(newPhoneList);
Home home1 = Home.builder().homePhoneList(newPhoneList).build();

entityManager.persist(home1);
entityManager.persist(person1);
entityManager.persist(person2);

在这里,我们显然能够在同一实体(Person)的两个实例之间以及完全不同的实体类型(Home)之间共享相同的集合引用,没有任何问题。所有三个实体都在数据库中保存/更新。

最佳答案

Two entities cannot share a reference to the same collection instance

这仍然是正确的。这意味着,如果您加载这些实体之一并更改电话集合,则其他实体的电话集合保持不变。

您只是在 java 中共享引用,而不是在数据库中共享。下次此共享引用将消失,您的所有实体都包含对其自己列表的单独引用。

关于java - Hibernate集合持久化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62072149/

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