Java 如何在hibernate中处理多个会话传输提交和回滚?

Java 如何在hibernate中处理多个会话传输提交和回滚?,java,mysql,hibernate,jakarta-ee,Java,Mysql,Hibernate,Jakarta Ee,我的代码中有一个问题,我正在使用服务器和客户端会话obj。像这样 Session serverSession=HibernateUtilServer.getSession(); Session clientSession=HibernateUtilLocal.getSession(); //这里有一些数据库操作 serverSession.beginTransaction().commit(); clientSession.beginTransaction().commit(); 但问题是s

我的代码中有一个问题,我正在使用服务器和客户端会话obj。像这样

Session serverSession=HibernateUtilServer.getSession();
Session clientSession=HibernateUtilLocal.getSession();
//这里有一些数据库操作

serverSession.beginTransaction().commit();
clientSession.beginTransaction().commit();
但问题是
serverSession.beginTransaction().commit()在这行之后,如果我遇到一些网络问题,则表示出现一些异常。我无法提交我的clientSession数据这是正常的意味着我可以
clientSession.beginTransaction().rollBack()。所以我想回滚serverSession数据,还想知道如何做到这一点,请帮助我

注意:这里serverSession和clientSession都有不同的数据库连接和不同的配置文件
谢谢。

这取决于hibernate和spring的使用。我看到你使用了非常好的框架。它已经有了非常好的事务管理支持。我建议你不要手工做这件事。使用其核心事务支持。举个例子: @您在方法级别、类级别等标记的事务注释只需阅读它的工作原理!!。你会得到更好的主意

参考链接:

编辑
若您并没有使用spring,那个么您需要捕获异常。您需要在那里回滚事务。若您想添加框架层,那个么就添加SuperClass或common方法来回滚事务。调用catch块。

如果运行本地事务,则每个请求的会话模式在每个会话中使用一个JDBC连接。对于JTA,在每条语句之后都会主动释放连接,但在下一条语句中会重新获得连接

Hibernate事务API将开始/提交/回滚委托给本地事务的JDBC连接和JTA的关联UserTransaction。因此,您可以在同一个Hibernate会话上运行多个事务,但有一个缺点。一旦抛出异常,就不能再重用该会话

我的建议是分而治之。只需拆分所有项,为每个项构造一个命令对象,并将它们发送到ExecutorService#invokeAll。使用返回的列表迭代并调用Future#get()以确保原始线程在所有批处理作业完成后等待


ExecutorService将确保您同时运行所有命令,并且每个命令都应使用使用其自己的@Transaction的服务。因为事务是线程绑定的,所以所有批处理作业都将独立运行。

谢谢您的回复。但是我没有使用spring框架,你可以添加评论的来源。