1

我有以下问题。有一个交易,下面做。

交易:

  1. 在数据库中查找是否有可用参数的对象。
  2. 如果不是,则创建此对象,否则,更改对象并进行更新。

假设我们有两个并行执行的事务(T1 和 T2)。

T1查看数据库,没有对象。一毫秒后,T2查看数据库,也没有对象。

T1 将对象保存到数据库中,它也生成了 T2。

我们在数据库中有两个对象而不是一个。

我们可以解决这个问题吗?

我正在使用:Hibernate + Spring + Tomcat

谢谢你。

4

2 回答 2

2

对于部署在一台服务器上的应用程序,解决方案非常简单。给函数“同步”属性。这样你就可以确定这个问题不会发生。

如果您在多台服务器上运行此应用程序,则可能会出现此问题。在这种情况下,您应该考虑一种集中式数据库访问机制。

这也可以使用 sql server 的功能来完成。在数据库服务器上创建一个存储过程并给它一个适当的隔离级别。你可以在这里阅读:为 postgresql 存储过程设置隔离级别

于 2012-07-12T08:06:17.577 回答
0

如果将两个相同的对象插入到数据库中,则会发生主键冲突,因此您的一个事务将无法写入并回滚。只需通过对其属性施加相关约束来确保对象必须是唯一的。

于 2012-07-12T08:07:20.277 回答