Подтвердить что ты не робот

Спящий режим: Тип каскада

Пусть у меня есть объект A и entity B. Entity A имеет отношение @OneToOne к B.
Я хочу сделать следующее:
если я удалю A, тогда B также должен быть удален.
Если я удалю B, то A не будет удалено.

В каком объекте я должен установить

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

и в какой стороне я должен установить

@OneToOne(cascade = {CascadeType.ALL})  

?

4b9b3361

Ответ 1

Каскад от 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

Ответ 2

если A "имеет" B, тогда вы должны определить CascadeType.ALL в A:

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

Ответ 3

Если класс 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;   
  }
}

для более подробной информации этот пример