Gibt es eine Möglichkeit, losgelöstes Objekt an JPA zu übergeben? (losgelöste Entität wurde weitergegeben, um fortzufahren)

8

Ich habe 2 Entitäten: Account und AccountRole .

%Vor%

.

%Vor%

Problem tritt auf, wenn ich die accountRole aus der Datenbank nehme und versuche, mein Account zu erhalten. An diesem Punkt habe ich gerade mein Konto erstellt und die Rolle existiert bereits in db.

%Vor%

Ich habe das gelesen: JPA / Hibernate: losgelöste Entität wurde an persist übergeben Und was ich verstanden habe, muss ich die Entitäten Werte aus beiden Richtungen, so dass was ich in meinem Setter tun.

Immer noch Fehler.

%Vor%     
Jaanus 12.12.2012, 08:51
quelle

2 Antworten

16

Ersetzen Sie einfach das

%Vor%

mit:

%Vor%

Und Merge-Kaskadierung zulassen:

%Vor%

Weil die Zusammenführung Folgendes bewirkt:

  

Wenn Ihre Entität neu ist, entspricht sie einer Persistenz ().   Aber wenn Ihre Entität bereits existiert, wird sie aktualisiert.

    
Jaanus 12.12.2012, 10:16
quelle
3

Es sieht so aus, als ob Sie die Transaktion während Ihrer Verarbeitung verlassen, so dass accountRole losgelöst wird oder aus anderen Gründen bereits entfernt wurde.

Ein Aufruf von entityManager.merge(accountRole) vor dem Aufruf von entityManager.persist(account) sollte das Problem beheben.

BEARBEITEN: Wenn Sie nicht sicher sein können, ob das accountRole bereits in der DB existiert, müssen Sie es leider durch Abfragen überprüfen. Wenn es existiert - Zusammenführung, wenn nicht - persistieren. Es ist in der Tat ein Aufwand, aber ich habe noch keine bessere Problemumgehung gesehen.

EDIT2: Die Entität, die Sie an die merge -Methode übergeben, bleibt losgelöst - die verwaltete Entität wird von merge zurückgegeben. Sie müssten also zuerst zusammenführen und dann die Referenz für account auf die Rückgabewert von merge .

    
kostja 12.12.2012 09:12
quelle

Tags und Links