Comment JPA (Hibernate) traite-t-il les transactions lors de l'extraction d'un objet depuis une base de données?

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

Question

Je développe actuellement une application java utilisant Hibernate en tant que gestionnaire de persistance et JPA en tant qu'abstraction de l'hibernation de gestion de la persistance.

J'aimerais connaître l'impact de l'enveloppe d'une requête de résultat autour d'une transaction. Je sais que le responsable de l’entité doit rester ouvert pour les bogues de recherche de champs paresseux. Qu’en est-il de la transaction dans tout cela?

Voici un exemple de code avec la capacité d'activation / désactivation de transaction.

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;
    }
}

Quelle est la différence entre l'activation et la désactivation de withTransaction lorsque cette fonction est appelée?

Merci à tous, Fred

Était-ce utile?

La solution

Il n'y a pas de différence pratique ici, puisque vous ne modifiez aucune donnée. La requête que vous exécutez générera une sélection SQL. Les transactions sont là pour vous permettre d'appliquer les propriétés ACID à une collection d'insertions, de mises à jour, etc.

Toutefois, , si vous commencez à manipuler les objets de la liste renvoyée par cette méthode, appelant des paramètres, etc., ces modifications seront propagées à la base de données lors d'une transaction ad-hoc. base. En d'autres termes, vous travaillerez effectivement avec la base de données en mode de validation automatique. Il est peu probable que ce soit ce que vous voulez.

Il est important de comprendre que la durée d’un contexte de persistance et d’une transaction peut être gérée séparément. Souvent, vous voudrez peut-être les gérer ensemble.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top