2009-06-02 5 views
1

Ich habe eine Methode, die Entitäten mithilfe einer NamedQuery abruft. Ich aktualisiere einen Wert jeder Entität und führe dann eine andere benannte Abfrage (in der gleichen Methode und Transaction) aus, die nach dem alten Wert filtert und die gleichen Entitäten zurückgibt, als ob ich sie nicht geändert hätte.JPA NamedQuery nimmt Änderungen an geänderter Entität nicht auf

Ich verstehe, dass die EntityManager muss geleert werden und auch, dass es automatisch passieren sollte, aber das macht keinen Unterschied.

Ich aktiviert Hibernate SQL-Protokollierung und kann sehen, dass die Entities sind nicht aktualisiert, wenn ich flush aufrufen, aber wenn die Container-Transaktion fest.

Antwort

1

Um ehrlich zu sein, ich bin nicht so vertraut mit JPA, aber ich stieß auf ähnliche Probleme mit Hiberate Session Manager. Meine Lösung bestand darin, das angegebene Objekt manuell aus der Hibernate-Sitzung zu entfernen, bevor es erneut abgefragt wurde, sodass es gezwungen ist, eine Suche von der Datenbank aus durchzuführen und das Objekt nicht aus dem Cache abzurufen. Sie könnten das gleiche mit dem EntityManager von JPA versuchen.

0

Ich habe gerade das gleiche Problem und entdeckte zwei Dinge:

  • Zunächst sollten Sie die Flushmode für den Persistenzkontext und/oder der Abfrage überprüfen.
  • Zweitens, stellen Sie sicher, dass der Entity Manager ist genau das gleiche Objekt für die Transaktionsverwaltung und Abfrage Ausführung. In meinem Fall hatte ich Mockito Spion auf den EntityManager, der reichte, um die Transaktionsverwaltung zu brechen.
Verwandte Themen