Bei bestimmten Entwurfsmustern kann es vorkommen, dass spezille Entitäten für die gesamte Anwendung aus dem Cache genommen werden müssen, um einen Reload beim nächsten Zugriff sicherzustellen. Ein
entityManager.detach(entity)
entfernt eine bestimmte Entität aus dem Persistence Context des aktuellen EntityManager
. Nach dem detach()
-Aufruf ist die Entität nicht mehr verwaltet, d. h. Änderungen an diesem Objekt werden nicht mehr automatisch synchronisiert.
Bei dieser Lösung wird nur der aktuelle em betrachtet. Die Entität kann im Cache verbleiben. Für ein „globales“ Entfernen muss die Entität aus dem Cache genommen werden.
this.em.getEntityManagerFactory().getCache().evict(EntityClass.class, pk);