Hibernate javax.la persistance.RollbackException: Erreur lors de la validation de la transaction

Je développe une application web java en utilisant Hibernate et MySQL. Parfois, quand j'essaie de persister choses, je reçois cette restauration exception:

javax.persistence.RollbackException: Error while committing the transaction
at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:94)
at com.tulips.dao.CommentDao.saveOrUpdate(CommentDao.java:42)
at com.tulips.servlets.CommentsServlet.doPost(CommentsServlet.java:168)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException
at org.hibernate.event.internal.AbstractFlushingEventListener.prepareEntityFlushes(AbstractFlushingEventListener.java:155)
at org.hibernate.event.internal.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:91)
at org.hibernate.event.internal.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:55)
at org.hibernate.internal.SessionImpl.flush(SessionImpl.java:1222)
at org.hibernate.internal.SessionImpl.managedFlush(SessionImpl.java:425)
at org.hibernate.engine.transaction.internal.jdbc.JdbcTransaction.beforeTransactionCommit(JdbcTransaction.java:101)
at org.hibernate.engine.transaction.spi.AbstractTransactionImpl.commit(AbstractTransactionImpl.java:177)
at org.hibernate.jpa.internal.TransactionImpl.commit(TransactionImpl.java:77)
... 23 more

voici mon persistence.xml fichier :

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="licenta_pu"
transaction-type="RESOURCE_LOCAL">
<!--        <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> -->
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/tulips"/>
<property name="hibernate.connection.username" value="...." />
<property name="hibernate.connection.password" value="...." />
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.show-sql" value="false" />
<!--            <property name="hibernate.jdbc.batch_size" value="1000" /> -->
<!-- <property name="hibernate.hbm2ddl.auto" value="update" /> -->          
</properties>
</persistence-unit>
</persistence>

J'ai essayé de changer les hibernate fournisseur, mais qui n'aide pas 🙁 [org.mise en veille prolongée.ejb.HibernatePersistence et org.mise en veille prolongée.jpa.HibernatePersistenceProvider]

Je ne sais pas exactement comment reproduire cette erreur, j'obtiens parfois, il arrive que je n'en ai pas. J'ai observé que chaque fois que je redémarre mon ordinateur et d'exécuter le projet dans Eclipse, et essayez de conserver les données, il fonctionne. Si j'arrête le projet, éventuellement ajouter des données dans la base de données via MySQL Workbench, puis exécutez à nouveau le projet, j'obtiens l'erreur.

Voici mon EntityManagerHolder:

public class EntityManagerHolder {
private static EntityManagerHolder INSTANCE = new EntityManagerHolder();
private EntityManagerFactory emf;
private EntityManager entityManager;
public EntityManager getEntityManager() {
return entityManager;
}
public static EntityManagerHolder getInstance() {
return INSTANCE;
}
private EntityManagerHolder() {
super();
emf = Persistence
.createEntityManagerFactory("licenta_pu");
entityManager = emf.createEntityManager();
}
}

Voici mon GenericDao:

import javax.persistence.EntityManager;
import javax.transaction.Transactional;
import com.tulips.model.AbstractEntity;
@Transactional
public abstract class GenericDao {
protected EntityManager em;
public GenericDao(EntityManager em) {
this.em = em;
}
public void saveOrUpdate(AbstractEntity e) {
if (e == null) {
throw new NullPointerException("Trying to persist a null object");
}
em.getTransaction().begin();
if (e.getId() == null) {
em.persist(e);
} else {
em.merge(e);
}
em.getTransaction().commit();
}
}

Je suis en utilisant la suite Hibernate bibliothèques:

        mysql-connector-java-5.1.9.jar;
hibernate-commons-annotations-4.0.4.Final.jar;
hibernate-core-4.3.4.Final.jar;
hibernate-entitymanager-4.3.4.Final.jar;
hibernate-jpa-2.1-api-1.0.0.Final.jar;

OriginalL'auteur user3159152 | 2014-07-04