Soy novato en Hibernate.Por qué org.hibernate.TransactionException en Hibernate y evitar
He intentado codificar un pequeño programa para insertar datos en el servidor de la base de datos mysql.
Este es el código fuente de mi programa:
private int insertRelateNew(int newId, List<DocSimilar> relateNews) {
Session session = HibernateUtils.currentSession();
Transaction tx = session.beginTransaction();
RelatedArticles relatedArticles = null;
try {
relatedArticles = new RelatedArticles();
for (DocSimilar doc : relateNews) {
ApplicationPK appPK = new ApplicationPK(newId,
(int) doc.getDocid());
relatedArticles.setApplicationPK(appPK);
relatedArticles.setRelated_score(doc.getPercent());
session.save(relatedArticles);
tx.commit();
session.flush();
}
} catch (Exception e) {
e.printStackTrace();
tx.rollback();
}
return newId;
}
Cuando se ejecuta, se inserte un éxito, pero en algún Se lanza un TransactionException.
Esta es la consola Excepción:
org.hibernate.TransactionException: Transaction not successfully started
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:131)
at com.ant.crawler.dao.hibernate.SqlNewsPersistencer.insertRelateNew(SqlNewsPersistencer.java:56)
at com.ant.crawler.dao.hibernate.SqlNewsPersistencer.insertNews(SqlNewsPersistencer.java:40)
at com.ant.crawler.dao.hibernate.SqlPersistencer.store(SqlPersistencer.java:44)
at com.ant.crawler.core.AbstractCrawler.crawl(AbstractCrawler.java:186)
at com.ant.crawler.core.Worker.run(Worker.java:14)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
busqué el problema, alguien aconsejó detectar la excepción y rollback().
Pero de esta manera puede perder el registro que quiero insertar en la base de datos.
Quiero encontrar por qué ocurre la excepción para evitarlo.
He buscado en la Excepción en Hibernate Java Doc: http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/TransactionException.html
Se dijo: "Indica que una transacción no se podría iniciar, confirmar o retrotraer".
No explica por qué ocurre la excepción.
Por favor, explíqueme por qué ocurre la excepción y cómo evitarla.
Muchas gracias.
¿Utiliza alguna API de registro? Habilite los registradores 'org.hibernate.transaction' y obtenga el registro para el análisis. –