Я новичок в 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 не распознает этот часовой пояс, 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)
Редактировать: если подумать об этом снова, вычитание одного часа совершенно неверно, поскольку соответствующий часовой пояс в настоящее время также находится в летнем времени, проблема синтаксического анализа остается в силе