让我有实体A
和实体B
。实体A
与@OneToOne
有B
的关系
我想做下一个:
如果我删除A那么B也必须删除。
如果我删除B,则A不会被删除。
我必须在哪个实体中设置
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
我必须在哪一方设置
@OneToOne(cascade = {CascadeType.ALL})
?
答案 0 :(得分:30)
从A到B的级联应放在引用类B
中的A
的字段上,从B到A的级联应放在引用A
类B
的字段中{1}}。
public class A {
@OneToOne(cascade = {CascadeType.ALL})
B b;
}
应该在课程A
中,因为您希望将每个操作级联到B
。
public class B {
@OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH})
A a;
}
应该在课程B
中,因为您只想将某些操作级联到A
答案 1 :(得分:3)
如果A“有”B,则必须在A:
中定义CascadeType.ALLpublic class A {
// changes to A cascade to B
@OneToOne(cascade = {CascadeType.ALL})
B b
}
答案 2 :(得分:0)
如果A类有B级,则 CascadeType.ALL 将应用于B. 那么
Public Class A
{
Private B b;
@OneToOne(cascade = CascadeType.ALL)
public B getB() {
return this.b;
}
public void B(B b) {
this.b = b;
}
}
更多阅读this示例