Hibernate Исключение в многопоточности - транзакция не была успешно запущена - PullRequest
0 голосов
/ 21 декабря 2018

Я получаю 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...