I'm newbie in Hibernate.

I have tried to code a small program to insert data into mysql database server.

This is source code of my program:

```java
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;
}

```

When running, It insert successful but sometime It throw a TransactionException.

This is Exception console:

```java
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)

```

I searched the problem, somebody advised catch the Exception and rollback(). 

But this way can lose the record that I want insert into DB.

I want find why the Exception is happen to avoid It.

I searched the Exception in Hibernate Java Doc: <http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/TransactionException.html>

It said: "Indicates that a transaction could not be begun, committed or rolled back."

It doesn't explain why the Exception happen.

Please explain for me why the exception happen and how avoid It.

Thanks very much.