【发布时间】:2014-04-03 12:37:32
【问题描述】:
我有两个线程,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 个线程同时运行而不会出现此异常?
【问题讨论】:
-
由于您的方法在自身内部创建和结束事务,因此每个线程将具有不同的事务。看起来在线程调用此方法之前,已经有一个与该线程关联的事务。在这段代码运行之前,您可能已经在代码中的某处创建了事务。
标签: java multithreading hibernate