私はHibernateの初心者です。なぜorg.hibernate.TransactionExceptionがHibernateで避けられるか
私はmysqlデータベースサーバーにデータを挿入するための小さなプログラムをコーディングしようとしました。
これは私のプログラムのソースコードです:
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;
}
実行している場合、それは成功した挿入が、いつかそれはTransactionExceptionを投げます。
これは例外のコンソールです:
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)
私は問題を検索、誰かが)例外とロールバックを(キャッチ助言しました。
しかし、この方法ではDBに挿入したいレコードが失われる可能性があります。
私は例外がなぜそれを避けるために起こるのかを知りたい。
私は、HibernateのJavaドキュメントで例外を検索:http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/TransactionException.html
それは言った:「トランザクションは、開始、コミットまたはロールバックすることができなかったことを示しています。」
例外が発生する理由は説明しません。
例外が発生する理由と回避方法を教えてください。
ありがとうございました。
ロギングAPIは使用していますか? 'org.hibernate.transaction'ロガーを有効にし、分析のためにログを取得します。 –