17

让我有 entityA和 entity B。实体与A@OneToOne关系B
我接下来要做的是:
如果我删除 A,那么 B 也必须被删除。
如果我删除 B,则不会删除 A。

我必须在哪个实体中设置

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

我必须在哪一边

@OneToOne(cascade = {CascadeType.ALL})  

?

4

3 回答 3

31

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

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

于 2012-05-11T12:46:05.893 回答
3

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

public class A {
  // changes to A cascade to B
  @OneToOne(cascade = {CascadeType.ALL})
  B b
}
于 2012-05-11T12:42:43.870 回答
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;   
  }
}

有关更多信息,请阅读示例

于 2012-05-11T13:04:18.167 回答