我有以下问题。有一个交易,下面做。
交易:
- 在数据库中查找是否有可用参数的对象。
- 如果不是,则创建此对象,否则,更改对象并进行更新。
假设我们有两个并行执行的事务(T1 和 T2)。
T1查看数据库,没有对象。一毫秒后,T2查看数据库,也没有对象。
T1 将对象保存到数据库中,它也生成了 T2。
我们在数据库中有两个对象而不是一个。
我们可以解决这个问题吗?
我正在使用:Hibernate + Spring + Tomcat
谢谢你。
我有以下问题。有一个交易,下面做。
交易:
假设我们有两个并行执行的事务(T1 和 T2)。
T1查看数据库,没有对象。一毫秒后,T2查看数据库,也没有对象。
T1 将对象保存到数据库中,它也生成了 T2。
我们在数据库中有两个对象而不是一个。
我们可以解决这个问题吗?
我正在使用:Hibernate + Spring + Tomcat
谢谢你。
对于部署在一台服务器上的应用程序,解决方案非常简单。给函数“同步”属性。这样你就可以确定这个问题不会发生。
如果您在多台服务器上运行此应用程序,则可能会出现此问题。在这种情况下,您应该考虑一种集中式数据库访问机制。
这也可以使用 sql server 的功能来完成。在数据库服务器上创建一个存储过程并给它一个适当的隔离级别。你可以在这里阅读:为 postgresql 存储过程设置隔离级别
如果将两个相同的对象插入到数据库中,则会发生主键冲突,因此您的一个事务将无法写入并回滚。只需通过对其属性施加相关约束来确保对象必须是唯一的。