java Hibernate级联子对象不在查找表中存储父表的ID
我有一个表a和表C。a-C之间的关系是1-*因此我有一个查找表B。 B存储A的“id”和C的“id”
实体:
Class A {
@OneToMany(mappedBy = "A", cascade = CascadeType.ALL)
private List<B> b;
}
Class B {
@ManyToOne
private A a;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id")
private C c;
}
Class C {
@OneToOne(mappedBy = "c")
private B b;
}
我在类A和类B中定义了CASCADE ALL,这意味着当我持久化类A的实体时,我希望持久化类B的所有实体,当我持久化类B的实体时,我希望持久化类C的所有实体
保存操作:
A a = new A();
B b = someMethodToGetB();
A.setB(B);
save(A);
someMethodToGetB() {
C c = new C();
b.setC(c);
return b;
}
问题: 所有条目均在表“C”中列出。 所有条目均在表“A”中列出。 但是表“B”(查找表)中的所有条目的类“A”的ID都为空
级联保存操作是如何工作的?在我的例子中,我首先希望在表C和A中创建条目。对于每个条目,查找表中都应该有一个条目。这是否可以通过使用级联以某种方式实现,或者我是否需要手动为A和C创建实体,然后获取ID并保存在B中
谁能指出我做错了什么或遗漏了什么
# 1 楼答案
Hibernate不是这样工作的。 在持久化时,如果持久化关系的所有者实体,则会应用关系上的持久化级联
在您的例子中,根据您使用的
mappedby
值,所有者是B所以,你应该根据你的需要设置好所有的关系
应该是:
我已经纠正了你伪代码中的错误