Ruhezustand persistieren, ohne Transaktion

War ich nach einem tutorial, Hibernate und sah Sie den folgenden code:

package com.websystique.spring.dao;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;

public abstract class AbstractDao {

    @Autowired
    private SessionFactory sessionFactory;

    protected Session getSession() {
        return sessionFactory.getCurrentSession();
    }

    public void persist(Object entity) {
        getSession().persist(entity);
    }

    public void delete(Object entity) {
        getSession().delete(entity);
    }
}

Ich Frage mich, ob persist() (oder save() oder delete()) kann verwendet werden, ohne eine Transaktion? Wie es scheint der Fall zu sein.

  • Ich Bemerke nebenbei, dass diese sehr schlecht ist code, der für eine Vielzahl von Gründen. Im Idealfall verwenden Sie Spring Data JPA (und constructor injection).
  • danke, werde schauen, in denen
  • Sie kann nicht bestehen aus einer Transaktion. Bitte schauen Sie bis zu Ihrem Ruhezustand conf-Datei. Es sollte bieten die Transaktion durch Abfangjäger
InformationsquelleAutor Liumx31 | 2016-09-18



2 Replies
  1. 2

    können nicht gespeichert oder beibehalten Objekt ohne Transaktion haben Sie einen commit für die Transaktion nach dem speichern das Objekt, weil es sonst nicht speichern in der Datenbank.
    Ohne Transaktion können Sie nur abrufen eines Objekts aus der Datenbank

    • so das tutorial-code nicht funktionieren würde?
  2. 1

    Wie gesagt, man KANN nichts speichern in der Datenbank, ohne dass eine aktive Transaktion.
    Es seens, dass Sie mit einem container, in diesem Fall Frühling.
    Frühjahr kann die Steuerung von Transaktionen durch interceptos wie Java ee.
    Lesen Sie hier mehr: http://docs.jboss.org/weld/reference/2.4.0.Final/en-US/html/interceptors.html

    Auch das sieht wie ein wirklich schlechtes Beispiel zu demonstrieren:

    public class TransactionalInterceptor {
    
        @Inject
        private Session session;
    
        @AroundInvoke
        public Object logMethodEntry(InvocationContext ctx) throws Exception {
            Object result = null;
            boolean openTransaction = !session.getTransaction().isActive();
            if(openTransaction)
                session.getTransaction().begin();
            try {
                result = ctx.proceed();
                if(openTransaction)
                    session.getTransaction().commit();
            } catch (Exception e) {
                session.getTransaction().rollback();
                throw new TransactionException(e);
            }
            return result;
        }
    
    }

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.