休眠:级联类型

时间:2012-05-11 12:38:49

标签: java hibernate jpa

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

我必须在哪个实体中设置

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

我必须在哪一方设置

@OneToOne(cascade = {CascadeType.ALL})  

3 个答案:

答案 0 :(得分:30)

从A到B的级联应放在引用类B中的A的字段上,从B到A的级联应放在引用AB的字段中{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.ALL
public 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示例