java - 级联在JPA中插入一对子子关系
问题描述
我有 4 个实体映射到 OneToMany 关联。所以实体A (OneToMany ) -> B (OneToMany ) -> C (OneToMany )-> D
我想一次保存整个结构。所以我已经cascade = CascadeType.ALL
为每个OneToMany
. 但似乎JPA不想保存C和D关联,我所做的只是B引用了A,而C和D被保存而没有引用。
当我用 c.setB(b) 和 d.setC(c) 之类的引用保存它时,它给了我错误object references an unsaved transient instance - save the transient instance before flushing
那么是否可以使用引用保存所有 4 个实体,或者我应该使用代码逐步完成?
A:
@OneToMany(mappedBy = "a", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<B> b;
乙:
@OneToMany(mappedBy = "b", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<C> c;
@JoinColumn(name = "aId")
@ManyToOne(fetch = FetchType.LAZY)
private A a;
C:
@OneToMany(mappedBy = "c", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<D> d;
@JoinColumn(name = "bId")
@ManyToOne(fetch = FetchType.LAZY)
private B b;
丁:
@JoinColumn(name = "cId")
@ManyToOne(fetch = FetchType.LAZY)
private C c;
解决方案
好吧,这是我的错误,我在 C 实体中添加了不存在的引用。所以这是可能的)Hibernate 做了所有 4 级级联!
推荐阅读
- java - Java 8 Date API - 获取一个月的总周数
- mysql - MySQL触发器中的死锁与嵌入式选择查询
- python - Pandas 基础设施数据统计图与每个用户的日期
- r - 运行逻辑回归时的对比错误
- python - 如何让 Python 中的 Pywinauto 单击不同语言的按钮?
- excel - 需要帮助创建一个 Excel 公式,该公式将根据每个 clientID 的记录数对我的行进行编号
- c# - EFCore - 如何从自动加载中排除拥有的对象?
- java - 为什么 ProGuard 不混淆内部类/枚举
- haskell - Data.Vector 的 unsafeFreeze/unsafeThaw 到底有多“不安全”?
- azure - Azure VM 通过 powershell 的 Powerstate