Jpa - Hibernate ManyToMany fügt viele in die Join-Tabelle ein

8

Ich habe folgende ManyToMany Beziehung zwischen WorkDay (hat Annotation ManyToMany) und Event

  

WorkDay-Entität

%Vor%
  

Ereigniselement

%Vor%

Angehängtes UI-Formular zur besseren Übersicht

Wenn ich "Clock" mit dem "run" -Symbol zum ersten Mal drücke, bedeutet dies "Erzeuge Event und starte den Arbeitstag" in Bean und rufe die folgenden Methoden auf:

%Vor%

Im Protokoll sehe ich:

  1. Einfügen in die Ereignistabelle
  2. Aktualisieren Sie die Tabelle work_day
  3. Einfügen in die Tabelle work_day_event

auf der Benutzeroberfläche aktualisiert nur den angehängten Rahmen. Sieht immer gut aus .. current WorkDay object hat ein Element in der events Sammlung, außerdem werden alle Daten in DB eingefügt .. aber wenn diese Zeit die Ereigniszeile editiert

Ereigniszeilen-Listener:

%Vor%

in work_day_event fügt eine neue Zeile mit den gleichen work_day_id und event_id Daten ein. Und wenn edit row sonst noch einen einfügen und etc .. Im Ergebnis habe ich mehrere gleich Zeilen in work_day_event table. Warum passiert das?

Link zum github-Projekt-Repository (ver-1.1.0- Viele-zu-viele-Probleme-Zweig)

    
HAYMbl4 23.04.2016, 15:27
quelle

2 Antworten

3

Ändern Sie CascadeType.ALL in CascadeType.MERGE für events in WokrDay entity

Verwenden Sie diesen Code

%Vor%

statt

%Vor%

Verwenden Sie nicht ArrayList , verwenden Sie HashSet . Weil ArrayList Duplikate erlaubt.

Weitere Informationen zu CasecadeType finden Sie im Lernprogramm:

  1. Hibernate JPA Cascade-Typen
  2. Cascading Best Practices
SkyWalker 29.04.2016 09:19
quelle
0

Ich denke, die einfache Lösung besteht darin, die Kaskade bei vielen zu vielen Beziehungen zu entfernen und die Aufgabe manuell auszuführen! . Ich sehe dich sowieso schon redundant. Also versuchen Sie, CascadeType.ALL

zu entfernen %Vor%

Wie @ManyToMany-Beziehung beibehalten - Eintrag duplizieren oder losgelöste Entität

    
Sagar 26.04.2016 08:23
quelle

Tags und Links