49 Stimmen

Wie kann man herausfinden, ob eine Entität in JPA / Hibernate freigestellt ist?

Gibt es eine Möglichkeit, den JPA EntityManager abzufragen, ob eine bestimmte Entität entkoppelt ist? Dieser SO-Beitrag diskutiert ein ähnliches Problem, gibt jedoch keinen Hinweis auf eine Möglichkeit, den JPA EntityManager zum Ablösestatus einer Entität zu befragen. Ich bevorzuge einen JPA-Weg, ansonsten hibernate-spezifisch

47voto

Piotr Nowicki Punkte 17434

Um zu überprüfen, ob die angegebene Entität vom aktuellen PersistenceContext verwaltet wird, können Sie die EntityManager#contains(Object entity) Methode verwenden.

27voto

Steve Chambers Punkte 33674

Die Antwort von Piotr Nowicki bietet eine Möglichkeit festzustellen, ob eine Entität verwaltet wird. Um herauszufinden, ob eine Entität entfernt wurde, müssten wir wissen, ob sie zuvor verwaltet wurde (z.B. aus der Datenbank stammt, z.B. durch Persistierung oder aus einer find-Operation erhalten wurde). Hibernate bietet keine "Entitätsstatus-Historie" an, daher gibt es keine zu 100 % zuverlässige Möglichkeit, dies zu tun, aber der folgende Workaround sollte in den meisten Fällen ausreichen:

public boolean isDetached(Entity entity) {
    return entity.id != null  // darf nicht transient sein
        && !em.contains(entity)  // darf derzeit nicht verwaltet sein
        && em.find(Entity.class, entity.id) != null;  // darf nicht entfernt worden sein
}

Oben wird angenommen, dass em der EntityManager ist, Entity die Entitätsklasse ist und ein öffentliches id-Feld besitzt, das ein @GeneratedValue Primärschlüssel ist. (Es wird auch angenommen, dass die Zeile mit dieser ID nicht durch einen externen Prozess aus der Datenbanktabelle entfernt wurde, nachdem die Entität entfernt wurde.)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X