Зачем использовать org.hibernate.TransactionException в Hibernate и избегать

Я новичок в Hibernate.

Я попытался написать небольшую программу для вставки данных в сервер базы данных mysql.

Это исходный код моей программы:

private int insertRelateNew(int newId, List 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)

Я искал проблему, кто-то посоветовал поймать исключение и откатиться ().

Но таким образом можно потерять запись, которую я хочу вставить в БД.

Я хочу выяснить, почему происходит исключение, чтобы избежать его.

Я искал исключение в Hibernate Java Doc: http://www.dil.univ-mrs.fr/~massat/docs/hibernate-3.1/api/org/hibernate/TransactionException.html

Он сказал: «Указывает, что транзакция не может быть начата, зафиксирована или откат."

Это не объясняет, почему возникает Исключение.

Пожалуйста, объясните мне, почему возникает Исключение и как его избежать.

Большое спасибо.

-121---1870 628-

Правильный анализ строки даты с информацией о часовом поясеЯ получаю отформатированную строку даты, подобную этой, через API сводного трекера: "2012/06/05 17:42:29 CEST" Я хочу преобразовать эту строку к объекту даты и времени UTC, похоже, что python-dateutil не...

Я получаю отформатированную строку даты через API основного трекера: "2012/06/05 17:42:29 CEST"

Я хочу преобразовать эту строку в объект даты и времени UTC, это выглядит так: python-dateutil не распознает этот часовой пояс, pytz его тоже не знает.

Боюсь, что лучше всего заменить CEST в строке на CET, но это кажется очень неправильным. Есть ли другой способ разобрать строки летнего времени на объекты даты и времени UTC, которые я не смог найти?

pytz.timezone('CEST')
# -> pytz.exceptions.UnknownTimeZoneError: 'CEST'
dateutil.parser.parse("2012/06/05 17:42:29 CEST")
# -> datetime.datetime(2012, 6, 5, 17, 42, 29)

Редактировать: если подумать об этом снова, вычитание одного часа совершенно неверно, поскольку соответствующий часовой пояс в настоящее время также находится в летнем времени, проблема синтаксического анализа остается в силе

5
задан Martin Thoma 27 January 2018 в 17:38
поделиться