我有两个线程,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调用的另一种方法是类似的,只是它是设置B的,而不是为...
我如何得到这两个线程并发运行没有这种异常?
由于您的方法创建并结束了自身内部的事务,因此每个线程都有不同的事务。它看起来像这个方法被线程调用之前那里已经有一个与该线程相关的事务。在这段代码运行之前,您可能已经在代码的某处创建了一个事务。 – Shailendra