Zum Inhalt springen

EntityManager updaten


Empfohlene Beiträge

Geschrieben

Guten Morgen,

ich kann den EntityManger nicht updaten. Die wesentlichen Codeschnippsel haber ich hier aufgeführt:

EntityManager em;

List<BestaetigungEntity>bee=em.createNamedQuery(BestaetigungEntity.QUERY_BLUBBERBLAHBLA).getResultList();

In einer for-schleife (darum die Variable counter. dtErstmeldung ist eine Variable in der ich das heute aktuelle Datum speichere) gehe ich dann denn Inhalt von bee durch um Erstmeldung_Am das heutige Datum zu verpassen (wird mir beim Debuggen auch korrekt angezeigt):

bee.get(counter).setErstmeldung_Am(dtErstmeldung.getSqlTimestamp());

Jetzt möchte ich die Änderung von bee dem EntityManager em mitgeben. Ich habe schon persist(), merger und nun als letztes refresh() versucht:

em.refresh(bee);

em.getTransaction().commit();

Aber es bricht mir schon nach em.refresh(bee) ab, em.getTransaction().commit() wird nicht einmal ausgeführt. Folgender Hinweistext erscheint:

java.lang.IllegalArgumentException: Entity not managed

Was mache ich falsch? Habe ich irgendwas wichtiges vergessen? Für einen Geistesblitz wäre ich dankbar.

Geschrieben

1. Code-Tags

2. Poste mal den Code, kein halb-Pseudocoe

3. Poste den ganzen Stacktrace

"Entity not managed" sagt normal aus dass dieses Objekt dem EntityManager noch nicht bekannt gemacht wurde.

Es gibt 3 States:

- Managed: EntityManager kennt das Objekt

- Detached: EntityManager kannte das Objekt, wurde aber aus dem EM "entfernt"

- Unmanaged: EntityManager kennt das Objekt nicht, z.B. wenn du "new ..." machst

Wenn ich deinen Pseudocode halbwegs verstehen würd wär's die Lösung wohl einfacher.

Ich tippe mal auf folgenden Sachverhalt:

Schritt 1: Objekte laden

Schritt 2: EntityManager schließen

Schritt 3: Objekte ändern

Schritt 4: Objekt updaten

Wenn du das tun willst dann machs so:


entityManager.getTransaction().begin();


for(MeinEntity e : entities()){

   entityManager.merge(e);

}


entityManager.getTransaction().commit();



Geschrieben
Guten Morgen,

em.refresh(bee);

em.getTransaction().commit();

Eins deiner Probleme wird auch sein das du keine Transaction startest...

erst starten und dann commit...

nur commit reicht nicht aus.

Geschrieben

Guda Moscha,

ich habe mir eure bisherigen Kommentare mit Interesse durchgelesen. Ich habe auch noch ein wenig im WWW gegoogelt und dabei folgenden Artiekl gefunden:

Prozesse und Systeme

Ich konnte nun das ganze mit eben diesem PersistenceContext lösen (Container-managed), sprich em.merge(); wird ohne Fehler ausgeführt.

Was mich nun noch interessieren würde ist: Gibt es (generell) eine Möglichkeit, nachdem ich merge() ausgeführt habe, mir eben aus dem aktuallisierten EntitiyManger em die neuen Daten 'schwarz auf weis' anzeigen zu lassen?

Geschrieben
[...]

Was mich nun noch interessieren würde ist: Gibt es (generell) eine Möglichkeit, nachdem ich merge() ausgeführt habe, mir eben aus dem aktuallisierten EntitiyManger em die neuen Daten 'schwarz auf weis' anzeigen zu lassen?

Definiere das mal genauer.

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...