Java 使用hibernate或连接池的请求保证

Java 使用hibernate或连接池的请求保证,java,hibernate,Java,Hibernate,使用连接池的hibernate是否需要重试以处理间歇性故障(例如网络问题)。我的同事认为这不是使用连接池的必要原因,如果连接有任何问题,那么连接池管理器会处理它。我不相信,因为连接可能是开放和有效的,但当提出请求时,它可能会屈服于网络问题 由于所做的工作与付款有关,我们需要强有力的保证更新的进行。我在谷歌上搜索了hibernate/连接池在单个请求期间如何处理间歇性问题,但找不到太多信息 通过调用getSession().update(object)保存实体wheregetSession()返回

使用连接池的hibernate是否需要重试以处理间歇性故障(例如网络问题)。我的同事认为这不是使用连接池的必要原因,如果连接有任何问题,那么连接池管理器会处理它。我不相信,因为连接可能是开放和有效的,但当提出请求时,它可能会屈服于网络问题

由于所做的工作与付款有关,我们需要强有力的保证更新的进行。我在谷歌上搜索了hibernate/连接池在单个请求期间如何处理间歇性问题,但找不到太多信息

通过调用
getSession().update(object)保存实体
where
getSession()
返回当前休眠会话。我们使用HibernateV4.3,查看它只提到在持久性实例具有相同标识符时引发异常


如果我能获得一些参考资料/文档的链接,我将不胜感激。

您应该依靠事务为您提供强有力的保证,确保更改是原子化的。因此,如果(网络)出现故障,您的事务将回滚


连接池不提供这样的功能,它们促进了连接的重用。请参阅有关连接池的问题:

谢谢。请求是在一个事务中发出的,因此我不太担心更改是原子性的。我更关心的是确保更新发生并得到保证(我们可能会通过队列强制执行)。池或休眠都无法“重试”。例如,如果已准备好PreparedStatements并设置了值,那么如果连接无效,池或Hibernate将无法知道如何在新连接上“重播”这些操作。为金融交易创建一个真正的容错系统是极其困难的。如果在内存中排队并在数据库出现故障时重试,则断电仍将丢失X操作。如果向本地XAc动作文件卷轴,如果系统在写入中间崩溃,在数据被刷新到磁盘之前会发生什么?加固系统使用冗余,包括电池备份的磁盘控制器,其运行时间足以在pwr故障时刷新数据。如果这真的是一个金融应用程序,你需要做大量的研究,否则你最终会走向灾难。规则#1:系统失败。谢谢@brettw这是我假设的,因此将相应地编码。