gpt4 book ai didi

java - 如何强制提交 Spring - 安全地 hibernate 事务

转载 作者:搜寻专家 更新时间:2023-10-30 20:09:39 25 4
gpt4 key购买 nike

我们正在将 spring 和 hibernate 用于 web 应用程序:该应用程序有一个购物车,用户可以在其中放置商品。为了保存不同登录名之间要查看的项目,购物车中的项目值存储在表中。提交购物车时,商品将被保存到不同的表中,我们需要生成订单号。

当我们将值插入表中以获取订单号时,我们使用获取最大订单号并将其加 +1。我们正在使用 spring 事务管理器和 hibernate,在代码流中我们获取订单号并更新 hibernate 对象以保存订单号值。当我调试时,我注意到只有在发出完整事务时才会插入订单号实体 bean。

这里的问题是当我们同时向服务器提交两个请求时,使用相同的订单号,并且只插入一个请求数据。无法插入另一个唯一的请求值。表中的订单号是唯一的。

我在调试时注意到,即使在发出 session 刷新后,持久层也没有插入到数据库中session.flush()

它只是在 spring 事务结束时更新内存并将数据插入数据库。我尝试明确地发出对交易的 promise

session.getTransaction().commit();

这会立即将值插入数据库,但在进一步的代码流中显示无法启动事务的消息。

非常感谢任何帮助。

添加:我用的Oracle数据库。该表有一个唯一的序列号,订单号也映射到它。

最佳答案

请按照以下步骤操作:- ,1) 在不同的服务类中创建一个传播 REQUIRES_NEW 的服务方法。2)在这个新方法中移动你的代码(无论你想刷新到数据库的代码)。3) 从现有的 api 调用此方法(由于 spring 中的代理,我们必须从不同的类调用此新服务方法,否则 REQUIRES_NEW 将无法确保您刷新数据)。

关于java - 如何强制提交 Spring - 安全地 hibernate 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24435989/

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