Изначально код был в следующей структуре, и он работал отлично -
Исходный код:
@Transactional
class foo
{
void public work()
{
task1;
task2;
}
}
Поскольку две задачи могут выполняться параллельно, мы реорганизовали их для размещения в двух потоках.
Написал две задачи в разных потоках, запустил их параллельно и получил следующую ошибку при вызове соответствующего DAO
Сессия Hibernate не привязана к потоку, и конфигурация не позволяет создавать нетранзакционный сеанс здесь
Поскольку сеанс гибернации привязан к текущему потоку, это становится проблемой с дочерними потоками.
Рефакторинг код:
@Transactional
class foo
{
void public work()
{
final Thread t1 = new Thread(new Job1());
t1.start();
final Thread t2 = new Thread(new Job2());
t2.start();
t1.join();
t2.join();
}
class Job1
{
public void run()
{
task1;
}
}
class Job2
{
public void run()
{
task1;
}
}
} * * тысяча двадцать-один