Hibernate:级联类型

我们有实体A和实体B 实体AB@OneToOne关系。
我想做下一个:
如果我删除A那么B也必须删除。
如果我删除B,则A不会被删除。

我必须在哪个实体中设置

 @OneToOne(cascade = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH}) 

我必须在哪一方设定

 @OneToOne(cascade = {CascadeType.ALL}) 

从A到B的级联应该放在B类引用B的字段上,从B到A的级联应该放在引用BA的字段上。

 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

如果A“有”B,则必须在A中定义CascadeType.ALL:

 public class A { // changes to A cascade to B @OneToOne(cascade = {CascadeType.ALL}) B b } 

如果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; } } 

更多阅读这个例子