Ich habe ein Problem und ich konnte keine Lösung finden. Ich habe bidirektional viel zu viele Anotationen. Ich habe diese Tabellen in DB (MariaDB):JPA ManyToMany bidirektionale einfügen
- Artikel
- Abschnitt
- item_section
Artikel gehört:
@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "item_section",
joinColumns = {
@JoinColumn(name = "item", nullable = false, updatable = false)},
inverseJoinColumns = {
@JoinColumn(name = "section", nullable = false, updatable = false)})
private Set<Section> sections;
Abschnitt Teil:
@ManyToMany(fetch = FetchType.EAGER, mappedBy = "sections")
private Set<Item> items;
PROBLEM:
ich zunächst einige Abschnitte erstellen. Als ich möchte Artikel "innerhalb" dieses Abschnitts erstellen. Also erstelle ich eine Instanz von Item und füge einige existierende Sektionen in set ein (Sektionen, die ich von DAO bekomme). Wenn ich den Artikel persistiere, werden Datensätze in den Tabellen item und item_section erstellt. Aber wenn ich einige der betroffenen Abschnitt von DAO und iterate thru Elemente bekommen Datenbank Änderungen sind nicht hier, Sections Instanzen sind im gleichen Zustand wie vor dem Einfügen.
Was habe ich falsch gemacht?
PS: Ich benutze Eclipse, aber ich glaube nicht, es
SOLUTION
Als @ Chris i bestehen utimately bereits nur eine Seite der Richtung existieren genannt sagte interessant ist. Es wurden keine Kaskaden definiert, so dass persistente Sektionen weder persistiert noch verschmelzen. So beste Lösung für meine staless und JTA-Lösung war die Verwendung merge statt auf Artikel anhalten und MERGE Kaskade Abschnitte Sammlung ...
Vielen Dank allen, die kamen zu helfen, vor allem aber zu @ Chris
Haben Sie sich bemüht, beide Seiten der Beziehung zu setzen? Da Sie keinen Persistenz-Code angeben, ist kein weiterer Kommentar möglich. –
Dank @NeilStockton, aber welche Persistenz Code möchten Sie? Ich mache einfach entityManager.persist (Element), wobei EntityManager eine Instanz von EntityManager und Element eine Instanz von Item ist. Was meinen Sie mit "_ \t Haben Sie sich bemüht, beide Seiten der Beziehung zu setzen? _" Ich habe beide Arent ich gesetzt? – Majlanky
Niemand kann sagen, ob Sie beide Seiten der Beziehung (in den Objekten, die beibehalten werden sollen) festlegen, da Sie den Persistenzcode nicht veröffentlichen (Sie haben nur die Klassen veröffentlicht). Du rufst also weiter auf "Gegenstand" ... und hast du den anderen Gegenstand (Abschnitt) angerufen? Niemand kann kommentieren, bis du es tust –