gpt4 book ai didi

java - Hibernate - @OneToMany 实体的持久集合

转载 作者:行者123 更新时间:2023-12-01 09:48:45 25 4
gpt4 key购买 nike

我想映射一个简单的父子关系。

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "mother")
public Set<User> getChildren() {
return children;
}

@ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "MOTHER_ID")
public User getMother() {
return this.mother;
}

测试用例:

@Test
public void t4adopt() {
User ewa = session.find(User.class, 1L);
User user = new User("abel", "abel@garden.com");
session.persist(user);
ewa.getChildren().add(user);
System.out.println("save eva's children");
session.saveOrUpdate(ewa);
//session.save(user);
session.flush();
System.out.println("4. " + ewa);
session.refresh(user);
System.out.println("5. " + user);
}
@Before
public void start() {
session.getTransaction().begin();
}

@After
public void close() {
session.getTransaction().commit();
session.close();
}

Hibernate 没有在子实体中分配母亲的 ID。

5. User [idUser=3, mother=null, userEmail=abel@garden.com, name=null, surname=null, userGroups=[], userLogin=abel]

当我直接将 child 分配给母亲时,它起作用了。

User user = new User("kain", "kain@garden.com");
User ewa = session.find(User.class, 1L);
user.setMother(ewa);
session.persist(user); //ok

最佳答案

通过设置

@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL,
mappedBy = "mother") public Set<User> getChildren() {
return children; }

您声明了mappedBy=mother,这意味着User是该关系的拥有实体,并且该关系在mother字段上设置。在 JPA/Hibernate 中,拥有方用于持久保存实体之间的关系。

请看一下:https://stackoverflow.com/a/21068644/2392469

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

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