ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
1036
1036
EMPFEHLEN
-
Hi,
ich habe ein Problem mit den Cascades in Hibernate. Bei meinem letzten Projekt habe ich versucht in die Annotations Cascades für das löschen von Objekten zu definieren.
Beispiel:
Note * <- -> 1 Appointment
Code :1 2 3 4
@OneToMany (mappedBy = "Appointment", fetch = FetchType.EAGER) @Cascade(value=org.hibernate.annotations.CascadeType.DELETE_ORPHAN) @JoinColumn(name="FK_ID_APPOINTMENT") private Set<Note> Notes;
Ich wollte die Cascades so definieren, dass wenn ich das Appointment lösche, automatisch alle Notes gelöscht werden.
Habe dann aber im offiziellen Hibernateforum gelsen, dass von den DELETE-Cascades abgeraten wird. Bei komplexeren Problemen sollte das "individuell" im Code gelöst werden. Habe ich drauf gehört und es folgendermaßen implementiert:
Code :1 2 3 4 5 6 7 8 9 10 11 12
public boolean del(int pos) { Appointment app = this.get(pos); //in einer abstrakten Hibernate-Manager Klasse definiert Set<Note> notes = app.getNotes(); for (Iterator<Note> i = notes.iterator(); i.hasNext();) { Note note = (Note)i.next(); super.delHibernateEntity(note, Note.class); //in einer abstrakten Hibernate-Manager Klasse definiert System.out.println(note.getID()); } app.setAttender_User(new HashSet<User>()); this.update(app); //in einer abstrakten Hibernate-Manager Klasse definiert return super.delHibernateEntity(app, Appointment.class); //in einer abstrakten Hibernate-Manager Klasse definiert }
Meine Frage nun: Was macht für euch mehr Sinn? Cascade oder selbst implementieren?
Gruß
Markus
-
15.02.11 13:55 #2
- Registriert seit
- Dec 2009
- Beiträge
- 125
Hi,
also ich verwende hierfür die JPA Annotations und das funktioniert ohne Probleme:
Department.class
Code java:1 2
@OneToMany(mappedBy = "department", cascade = { CascadeType.MERGE, CascadeType.DETACH, CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.REMOVE }, fetch = FetchType.LAZY) private Set<Account> accounts;
Beim Löschen ist nur darauf zu achten, dass die Integrität nicht verletzt wird z.B. wenn es noch Entities gibt, welche die zu löschende Department Entity noch referenzieren.
Gruß Sebastian
-
Hi,
ich bin generell gegen cascade.
Denn mit wachsender Struktur wird das nicht mehr wartbar. Dann lieber mehr Geist in das Löschen setzen. Da weiß man wenigstens was passiert.
Einzige Ausnahme an der ich die Cascade-Types setzen würde, wären OneToOne-Beziehungen. Diese Beziehungen kommen aber eben seeehr selten vor
Ähnliche Themen
-
jsf - Hibernate - Caching Probleme
Von alan79 im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 7Letzter Beitrag: 24.09.09, 17:54 -
Hibernate: Mapping v. Beziehungen und was Hibernate daraus macht
Von DerGrinsemann im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 2Letzter Beitrag: 14.08.08, 12:53 -
Probleme mit hibernate: hibernate.properties not found
Von tc11 im Forum JavaAntworten: 0Letzter Beitrag: 12.10.06, 18:07 -
Probleme mit dem Hibernate Syncronizer
Von mki_germo im Forum JavaAntworten: 1Letzter Beitrag: 01.06.06, 09:26 -
[MySQL] ON UPDATE CASCADE ON DELETE CASCADE Problem
Von SwingTänzer im Forum Relationale DatenbanksystemeAntworten: 2Letzter Beitrag: 06.08.04, 13:57





Zitieren
Login





