2012-03-28 3 views
0

Ich frage mich, wie ich eine Spalte in einer Tabelle mit EclipseLink aktualisieren kann. Ich versuchte mit EntityManager.merge(myObject);, aber dann EclipseLink warf einige Ausnahmen, dass es nicht die anderen Spalten mit einem Null-Wert aktualisieren. Ich habe versucht, die @ChangeTracking Eigenschaft zu meiner Klasse hinzuzufügen, die ich aktualisieren möchte, so aktualisiert es nur die Spalte, die geändert wurde, aber es hat nicht funktioniert, und ich weiß nicht, ob das der richtige Weg ist, es zu tun.Wie aktualisiere ich eine Spalte in einer Tabelle in MySQL mit EclipseLink?

Wie kann ich nur eine einzelne Spalte in einer Tabelle mit EclipseLink aktualisieren?

Antwort

1

Wenn Ihre Zusammenführung nicht funktioniert, liegt dies wahrscheinlich daran, dass Sie eine neue Instanz von Grund auf neu erstellen und nur versuchen, den Wert zu füllen, den Sie ändern möchten. Dies führt dazu, dass alle anderen Felder mit null überschrieben werden. Verwenden Sie em.merge nicht für unvollständige Entitäten, da es jedes von JPA verwaltete Feld zusammenführt - es hat keine Möglichkeit zu wissen, was Sie beabsichtigt haben, und muss den gesamten Status der Entität zusammenführen.

Verwenden Sie stattdessen Ihre Änderungen, um die verwaltete Instanz zu ändern. Ein einfaches Beispiel:

em.getTransaction().begin(); 
YourEntity instance = em.find(YourEntity.class, id); 
instance.setYourAttribute(newValue); 
em.getTransaction().commit(); 

Oder eine abgelöste Instanz, die von einer EM eingelesen wurde, die Sie später em.merge verwenden.

+0

Danke! Das hat funktioniert! Was ist mit @ChangeTracking? Was ist das und wann man es benutzt? – Rox

Verwandte Themen