2016-12-02 1 views
0

So habe ich diesen Codekeine Transaktion derzeit aktiv

public static void insert(User user) { 
    EntityManager em = DBUtil.getEmFactory().createEntityManager(); 
    EntityTransaction trans = em.getTransaction(); 
    trans.begin();   
    try { 
     em.persist(user); 
     trans.commit(); 
    } catch (Exception e) { 
     System.out.println(e); 
     trans.rollback(); 
    } finally { 
     em.close(); 
    } 
} 

aber wenn ich laufe ich erhalte diese Störung

picture

+0

als Code Beitrag Fehler als auch – XtremeBaumer

+0

Sieht aus wie der Server hier etwas fehlt, wie in, sollten Sie etwas haben, bevor diese senden. Siehe: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes – Flummox

Antwort

1

Sie müssen erst prüfen, ob die Transaktion aktiv dank EntityTransaction#isActive() ist vor dem Anruf rollback().

Das nicht-verwalteten Umgebung Idiom ist:

EntityManager em = emf.createEntityManager(); 
EntityTransaction tx = null; 
try { 
    tx = em.getTransaction(); 
    tx.begin(); 

    // do some work 
    ... 

    tx.commit(); 
} 
catch (RuntimeException e) { 
    if (tx != null && tx.isActive()) tx.rollback(); 
    throw e; // or display error message 
} 
finally { 
    em.close(); 
} 

Für weitere Informationen überprüfen §5.2.1 aus der Dokumentation des Hibernate.

Also in Ihrem Fall sollte der Code eher sein:

EntityManager em = DBUtil.getEmFactory().createEntityManager(); 
EntityTransaction trans = null; 
try { 
    trans = em.getTransaction(); 
    trans.begin(); 
    em.persist(user); 
    trans.commit(); 
} catch (Exception e) { 
    System.out.println(e); 
    if (trans != null && trans.isActive()) 
     trans.rollback(); 
} finally { 
    em.close(); 
} 
Verwandte Themen