Frage

Ich habe zwei Entitäten, mit den folgenden JPA Anmerkungen:

@Entity
@Table(name = "Owner")
public class Owner implements Serializable
{
  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  @Column(name = "id")
  private long id;

  @OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
  @JoinColumn(name="Data_id")
  private Data Data;  
}

@Entity
@Table(name = "Data")
public class Data implements Serializable
{
  @Id
  private long id;
}

Inhaber und Daten haben eine Eins-zu-Eins-Abbildung, die Eigentümerseite ist Besitzer. Das Problem tritt auf, wenn ich ausführen: owner.setData (null); ownerDao.update (Inhaber) ; Die „Besitzer“ Tisch des DATA_ID wird null, das ist richtig.

Aber die „Data“ Zeile wird nicht automatisch gelöscht. Ich muss einen anderen DataDao schreiben, und eine andere Dienstschicht die beiden Aktionen (ownerDao.update (Inhaber); dataDao.delete (Daten);) wickeln

Ist es möglich, eine Datenzeile automatisch gelöscht, wenn der besitzende Besitzer es auf null gesetzt?

War es hilfreich?

Lösung

Je nach Hibernate Version verwenden:

verwenden, um die cascadeType: DELETE_ORPHAN oder orphanRemoval = true auf der @OneToOne Anmerkung

Dokumentation: http: // docs.jboss.org/hibernate/core/3.3/reference/en/html/objectstate.html#objectstate-transitive

Ich habe nie versucht, es auf OneToOne, sondern aus dem doc, sollte es funktionieren.

@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL)
@JoinColumn(name="Data_id")
@org.hibernate.annotations.Cascade({org.hibernate.annotations.CascadeType.DELETE_ORPHAN})
private Data Data;

oder

@OneToOne(fetch=FetchType.EAGER , cascade=CascadeType.ALL, orphanRemoval=true)
@JoinColumn(name="Data_id")
private Data Data;

EDIT: Ich fand diesen SO Beitrag:

scroll top