Habe zwei folgende Entity-Klassen:
@Entity
public class Person {
@OneToOne
private Abteilung abteilung;
}
@Entity
public class Abteilung {
Wenn ich versuche, eine Abteilung zu löschen, bekomme ich die Meldung, das FK aus der Tabelle 'person' auf die Abteilung, die gelöscht werden soll, immer noch verweist.
public void deleteAbteilung(Abteilung a) {
Fehlermeldung:
Caused by: org.postgresql.util.PSQLException: FEHLER: Aktualisieren oder Löschen in Tabelle „peson“ verletzt Fremdschlüssel-Constraint „fk_peson_abteilung_id“ von Tabelle „person“
Detail: Auf Schlüssel (id)=(20170) wird noch aus Tabelle „person“ verwiesen.
Irgendwie komme ich nicht weiter, denn auch cascade=CascadeType.REMOVE hat nicht geholfen. Wie löscht man so etwas (bidirektionale Association)?
(arbeite mit PostgreSQL und eclipselink)
Zusatzinfos:
Danke
@Entity
public class Person {
@OneToOne
private Abteilung abteilung;
}
@Entity
public class Abteilung {
@OneToMany(fetch = FetchType.EAGER, orphanRemoval = true)
private List<Person> mitearbeiterListe;
}private List<Person> mitearbeiterListe;
Wenn ich versuche, eine Abteilung zu löschen, bekomme ich die Meldung, das FK aus der Tabelle 'person' auf die Abteilung, die gelöscht werden soll, immer noch verweist.
public void deleteAbteilung(Abteilung a) {
// in Kurzform ...
EntityMangaer em = ...
em.getTransaction().begin();
if (!em.contains(abteilung)){
em.remove(abteilung)
em.getTransaction().commit();
}EntityMangaer em = ...
em.getTransaction().begin();
if (!em.contains(abteilung)){
abteilung = em.merge(abteilung);
}em.remove(abteilung)
em.getTransaction().commit();
Fehlermeldung:
Caused by: org.postgresql.util.PSQLException: FEHLER: Aktualisieren oder Löschen in Tabelle „peson“ verletzt Fremdschlüssel-Constraint „fk_peson_abteilung_id“ von Tabelle „person“
Detail: Auf Schlüssel (id)=(20170) wird noch aus Tabelle „person“ verwiesen.
Irgendwie komme ich nicht weiter, denn auch cascade=CascadeType.REMOVE hat nicht geholfen. Wie löscht man so etwas (bidirektionale Association)?
(arbeite mit PostgreSQL und eclipselink)
Zusatzinfos:
- Die Person ist an sich ein Angestelter und muss eine Abteilung-Referenz haben, während die Abteilung auch ohne Personen (Mitarbeiter) existieren kann.
- Habe auch versucht, zuerst die Person-Instanzen aus der Liste zu löschen und erst dann die Abteilung, hat nicht geklapt (alles in einer Transaktion)
- Das Löschen muss in einer Transaktion erfolgen, um im Falle dass es nicht klappt, ein rollback machen zu können.
Danke
Zuletzt bearbeitet: