[JPA] Tansistive Persistenz?

Soahc

Aktives Mitglied
Hallo Zusammen,

ich arbeite mit der JPA und habe 2 Klassen:

Java:
@Entity
public classe ClassA{
...
}
und
Java:
public classe ClassB{
...
@ManyToOne
ClassB classB;
...
}

es besteht also eine 1-zu-n Beziehung zwichen ClassA und ClassB. Nun möchte ich, dass wenn wenn ich per Entity Manager einer Instanz der Klasse ClassA lösche, dass dann automatisch alle Instanzen der ClassB gelöscht werden. Wie kann ich das am besten umsetzen?

liebe Grüße,

Soahc
 
G

Gelöschtes Mitglied 5909

Gast
mit @ManyToOne(cascade={CascadeType.REMOVE}) sollte das gehn
 
Zuletzt bearbeitet von einem Moderator:

Soahc

Aktives Mitglied
leider nein. Das funktioniert dann, wenn ich eine Instanz von ClassB vom Entity Manager löschen lasse und die damit assozierte Instanze von ClassA automatisch auch gelöscht werden soll. Ich will es aber eben genau umgedreht.
 
M

maki

Gast
JPA ist nicht dafür da, deine Objektabhängigkeiten zu managen, dass musst du schon selber machen.
 

Soahc

Aktives Mitglied
Naja da es konstrukte wie eben @ManyToOne(cascade={CascadeType.REMOVE}) gibt, hatte ich gehofft, dass es für mein Problem auch eine einfach lösung gibt. Aber gut, dann müssen die Abhängigen Entitäten eben programmatisch entfernt werden. Dank.
 
N

nillehammer

Gast
Wenn Du Hibernate benutzt, gibt es da was. Es heißt "delete orphan" (org.hibernate.annotations.CascadeType.DELETE_ORPHAN).
Edit1: Seit JPA 2.0 gibts das jetzt auch in JPA hier heißt es "orphanRemoval"
Edit2: Warte mal. Die beiden Mappings gehen wohl nur auf der OneToMany-Seite. Die gibts bei Dir ja garnicht. Aber das hier müsste auch auf der ManyToOne-Seite funktionieren @OnDelete(action = CASCADE) Ist aber wieder nur Hibernate.
 
Zuletzt bearbeitet von einem Moderator:

Landei

Top Contributor
Wenn alle Stricke reißen, kannst du dir auch in allen gängigen DBs einen Trigger zusammenbasteln. Nicht schön und schlecht zu warten, aber funktioniert auch.
 

bluer

Aktives Mitglied
So wie du deine Abhängigkeiten aufgebaut hast, weiß Klasse A gar nichts von der Existenz der Abhängigkeit. Du hast sozusagen eine Unidirektionale 1-n-Beziehung. Folgendes sollte klappen:
Java:
@Entity
public class ClassA{
 ...
    @OneToMany( cascade={CascadeType.ALL}, fetch=FetchType.EAGER)
    private List<ClassB> classBList;

    //getter und setter
 ...
}

@Entity
public class ClassB{
   //properties
}
Soll es bidirektional werden, so musst du der classB noch folgendes einfügen:
Java:
...
    @ManyToOne
    private ClassA classA;
...
 
Ähnliche Java Themen

Ähnliche Java Themen


Oben