C#_Rookie Geschrieben 14. September 2009 Geschrieben 14. September 2009 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. Zitieren
ksg9-sebastian Geschrieben 14. September 2009 Geschrieben 14. September 2009 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(); Zitieren
elSusto Geschrieben 14. September 2009 Geschrieben 14. September 2009 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. Zitieren
C#_Rookie Geschrieben 15. September 2009 Autor Geschrieben 15. September 2009 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? Zitieren
kein-tee Geschrieben 15. September 2009 Geschrieben 15. September 2009 [...] 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. Zitieren
Empfohlene Beiträge
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.