Я получаю org.hibernate.TransactionException: транзакция не была успешно запущена для указанного ниже кода, который находится в процессе параллельного выполнения (многопоточный).
Session session = null;
Transaction tx = null;
try {
session = getSession();
tx = session.beginTransaction();
Criteria criteria = session.createCriteria(DataItem.class);
criteria.add(Restrictions.eq("displayName", displayName));
DataItem dataItem = (DataItem) criteria.setMaxResults(1).uniqueResult();
return dataItem;
} catch (HibernateException e) {
if ( tx != null ) tx.rollback();
String errorMsg = getResourceString( CONFIG_READ_ERROR );
logger.error( errorMsg, e );
throw new ConfigException( errorMsg, e);
} finally {
if(!tx.wasCommitted()) {
tx.commit();
}
if ( session != null ) session.close();
}
Ошибка выскакиваетс tx.commit в блоке finally.Ниже приведена трассировка стека корневых ошибок:
org.hibernate.TransactionException: транзакция не была успешно запущена в org.hibernate.transaction.JDBCTransaction.commit (JDBCTransaction.java:131)
Я подозреваю, что что-то пошло не так с транзакцией, так как упомянутый блок кода находится в параллельном исполнении.Кто-нибудь может указать, что такое поток кода ошибки?
Метод getSession
protected Session getSession() {
SessionFactory sessionFactory = BuildSessionFactory.getSessionFactory();
Interceptor interceptor = BuildSessionFactory.getSessionInterceptor();
if (connection != null) return sessionFactory.openSession(connection,interceptor);
return sessionFactory.openSession(interceptor);
}