Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

EntityManager updaten

Empfohlene Antworten

Veröffentlicht

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.

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();



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.

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?

[...]

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.

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.