gpt4 book ai didi

java - JPA合并外键丢失

转载 作者:行者123 更新时间:2023-11-29 12:53:22 24 4
gpt4 key购买 nike

我是 JPA Hibernate 实现的新手,我正在尝试了解 EntityManager.merge 的工作原理。
我有以下两个具有 @ManyToOne 关系的类的场景,例如

class A{
private String name;
........
get...
set...
}

class B{
private String name;

@ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.MERGE)
private A a;
........
get...
set...
}

我有 GUI,您只能在其中查看和更改 B 属性 - A 类未加载,并且 View 中没有打开 session 。
当尝试在后端保存(合并)更改时:

entityManager.merge(b); //the object "b" created from view has "a" set to null

在表 B 的数据库中,外键关系(引用表 A)丢失 - 设置为 null;
这不是我想要的,我想保留关系并将 GUI 中所做的更改合并保存到对象 B,而不丢失多对一关系
也许我期待的事情是不可能的,我需要做的是:

 dbB b = entityManager.find(B.class, id);
dbB.setName(b.getName());
dbB.set........
entityManager.merge(dbB);

最佳答案

如果在entityManager.merge(b);中,关系b.a为空,merge将删除外键。这是因为值 null 并不意味着应该忽略引用,而是应该删除引用(即不再有引用)。

I want to keep the relationship and merge-save the changes made in the GUI to object B with out losing the Many-To-One relationship

一种选择是从数据库中读取实体,并将 a 初始化为惰性代理并将其传递给 GUI。在此过程中,实体很可能会分离,因此您需要在保存期间合并它。但是,由于在这种情况下 a 不会为 null,因此引用不应丢失。

关于java - JPA合并外键丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432987/

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