gpt4 book ai didi

java - 线程和事务 : nested transactions not supported

转载 作者:行者123 更新时间:2023-12-01 13:11:22 25 4
gpt4 key购买 nike

我有两个线程,A 和 B,每个线程都将数据插入到两个不同且不相关的表中。但是,我收到了 org.hibernate.TransactionException:不支持嵌套事务

这是为线程 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...

如何让这两个线程同时运行而不出现此异常?

最佳答案

您必须使用synchronized block 或synchronized方法来执行上述任务。

注意,Session 不是一个线程安全的对象,但是如果你确定它不会出现并发问题,你只需要使用 TransactionSynchronizationUtils 来绑定(bind)一个 session线程资源,然后在需要时解除绑定(bind)

关于java - 线程和事务 : nested transactions not supported,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22838013/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com