Wie JPA (Hibernate) befassen sich mit der Transaktion, wenn das Abrufen Objekt aus der Datenbank

StackOverflow https://stackoverflow.com/questions/245723

Frage

Ich bin derzeit eine Anwendung in Java mit Hibernate als Persistenz-Manager und JPA als Abstraktion der Persistenz developping Hibernate verwalten.

Ich möchte die Auswirkungen der Verpackung ein Ergebnis Abfrage um eine Transaktion kennen. Ich weiß, dass das Unternehmen Manager für träge abgerufene Feld Bug offen bleiben muss, was über Transaktion in das alles?

Hier ist ein Codebeispiel mit der Transaktion Aktivierung / Desaktivierung Fähigkeit.

public List<Exportdata> get(Integer max, EntityManager em, Boolean withTransaction) {
    EntityTransaction tx = null;
    try {
        if (withTransaction) {
            tx = em.getTransaction();
            tx.begin();
        }

        Query query = em.createQuery("from Exportdata");
        query.setMaxResults(10);
        List<Exportdata> list = query.getResultList();

        if (withTransaction)
            tx.commit();

        return list;
    } catch (RuntimeException re) {
        if (withTransaction)
            if (tx != null && tx.isActive())
                tx.rollback();

        throw re;
    }
}

Was ist der Unterschied zwischen Aktivierung oder Deaktivierung withTransaction wenn diese Funktion aufgerufen wird?

Danke allen, Fred

War es hilfreich?

Lösung

Es gibt keinen praktischen Unterschied hier, da Sie keine Daten ändern. Die Abfrage, die Sie ausführen, wird eine SQL-Select erzeugen. Transaktionen sind für Sie da, damit ACID-Eigenschaften zu einer Sammlung von Einfügungen, Aktualisierungen gelten, etc.

Jedoch , wenn Sie die Objekte in der Liste zu manipulieren beginnen, von dieser Methode zurück, Einrichter Aufruf usw. werden diese Änderungen vermehrt in die Datenbank zurück out-Transaktion mit einer auf einem Ad-hoc Basis. Mit anderen Worten werden Sie effektiv mit dem db in auto-commit-Modus arbeiten. Dies ist unwahrscheinlich zu sein, was Sie wollen.

Die wichtige Sache zu verstehen ist, dass die Dauer eines Persistenzkontext und eine Transaktion kann separat verwaltet werden. Oft wenn Sie sie zusammen verwalten wollen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top