Hibernate,高并发问题

时间:2012-07-12 08:03:50

标签: database multithreading hibernate concurrency transactions

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

事务:

  1. 查看数据库中是否有可用参数的对象。
  2. 如果没有,则创建此对象,否则,更改对象并进行更新。
  3. 假设我们有两个并行执行的事务(T1和T2)。

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

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

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

    我可以解决这个问题吗?

    我正在使用:Hibernate + Spring + Tomcat

    谢谢。

2 个答案:

答案 0 :(得分:2)

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

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

这也可以使用sql server的功能来完成。在数据库服务器上创建存储过程并为其提供适当的隔离级别。您可以在此处阅读:set isolation level for postgresql stored procedures

答案 1 :(得分:0)

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