gpt4 book ai didi

java - 避免 JPA TransientObjectException 而不手动保存所有内容

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

我有一个像这样的对象层次结构(忽略所有字段,如 id、setters/getters 等):

@Entity
class A {
@OneToOne(cascade=CascadeType.ALL)
private B b;
}

@Entity
class B {
@OneToOne(cascade=CascadeType.ALL)
private A a;

@OneToOne(cascade=CascadeType.ALL)
private C c;
}

@Entity
class C {
private int x;
}

所有实体都有@Id @GenerateValue private Long id;

我将 JPA 与 Hibernate 和 MySQL 一起使用,并且有一个用于 A 的 DAO,它执行一个简单的 entityManager.merge(a);实体管理器.flush();

现在,这个构造被用在 JSF 项目中,我在其中创建了一个新的 A,其中包含一个新的 B,但值是 C是从数据库中获取的,因此它是一个现有的实体。这个新填充的对象显示在页面上,并且仅当我单击保存按钮时才保存,因此创建和保存是在两个不同的事务中完成的。

当我尝试执行dao.save(a)时,我得到一个org.hibernate.TransientObjectException,这并不奇怪,因为的值类 B 中的 c 已存在于数据库中。

现在的实际问题是:我可以在不手动级联保存的情况下以某种方式避免这个问题吗?我正在谈论数十个 B 类型的类,每个类都有数十个 C - 这完全违背了我的级联想法......

任何想法表示赞赏!

最佳答案

由于注释可能存在问题。您可以从此Example获得帮助解决您的问题。

关于java - 避免 JPA TransientObjectException 而不手动保存所有内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13357851/

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