У меня есть два потока, A и B, и каждый из них вставляет данные в две разные и несвязанные таблицы. Однако я получаю org.hibernate.TransactionException: nested transactions not supported
.Темы и транзакции: вложенные транзакции не поддерживаются
Вот код делает вставку для резьбы A:
@Override
public void setA(List<A> a) throws HibernateException {
if (session == null) {
session = sessionFactory.openSession();
}
Transaction tx = session.beginTransaction();
try {
int count = 0;
for (A row : a) {
session.save(row);
if (count++ % 1000 == 0) {
session.flush();
session.clear();
}
}
tx.commit();
} catch (Exception e) {
tx.rollback();
} finally {
session.close();
}
}
Другой метод, называемый по нити B аналогична, только устанавливает Bs вместо As ...
Как я получить эти 2 потока для запуска одновременно без этого исключения?
Поскольку ваш метод создает и завершает транзакцию внутри себя, каждый поток будет иметь разные транзакции. Похоже, что до того, как этот метод вызывается потоком, уже существует транзакция, связанная с этим потоком. Вероятно, вы уже создаете транзакцию где-то в коде, прежде чем этот фрагмент будет работать. – Shailendra