2017-06-12 3 views
0

Ich habe eine @ManyToOne Beziehung zwischen Workpackage s und Project s. Wo ein Projekt ein bis viele Arbeitspakete haben kann.Kaskadenartige Löschung in einer ManyToOne-Beziehung

Meine Workpackage Einheit bezieht sich auf die Project ein wie solche:

@NotNull 
@ManyToOne(targetEntity = ProjectEntity.class) 
private ProjectEntity project; 

daher jede Zeile in meinem Workpackage Tabelle der id eines bestimmten Projekt verweist.

Aber wenn ich versuche, ein Projekt zu löschen, bekomme ich eine Fremdschlüssel-Einschränkung (was sinnvoll ist, da mein Arbeitspaket von einem Projekt abhängt und gelöscht werden sollte, bevor das vorherige gelöscht wird).

Aber ein cascade = CascadeType.REMOVE wird nicht funktionieren, da ich mein Projekt lösche und nicht meine Workpackage. Wäre es möglich, die Workpackage zu löschen, die sich auf ein bestimmtes Projekt bezieht?

Als neu zu Hibernate, nichts kommt offensichtlich zu anderen als durch alle Workpackage gehen und löschen sie eins nach dem anderen.

+0

** explizit entfernen ** können Option, http://www.objectdb.com/java/jpa/persistence/delete –

Antwort

0

ON DELETE CASCADE: Wenn Sie eine Projektzeile in Tabelle Project löschen, löscht die Engine auch die zugehörigen workPackages. Dies kann verwendet werden, um automatische Bereinigungen auf sekundären Tabellen durchzuführen.

  1. Wenn Schema erklären Sie wie folgt vor, was

    alter table Workpackage add constraint constraintName foreign key (id) references Project(id) on delete cascade

  2. Sie Kinder explizit Objekt als null gesetzt wird.

    for (Workpackage child : project.getWorkpackages()) { child.setProject(null); } session.delete(OwningSide);

+0

Wie kann das über 'Hibernate' erreicht werden? Ich bin mir nicht sicher, ob ich Ihre zwei Punkte verstehe. – Christopher

+0

Bitte folgen Sie dem zweiten Punkt, um dies im Ruhezustand durchzuführen. Bevor Sie das Projekt löschen, rufen Sie alle workPackages ab und setzen Sie Project explizit auf null. Hibernate stellt sicher, dass beim Löschen von Project workPackages automatisch gelöscht wird. – Sudhakar

Verwandte Themen