Hibernate-如何限制多个用户同时读取记录?

Hibernate-如何限制多个用户同时读取记录?,hibernate,locking,Hibernate,Locking,我们正在使用Hibernate3.6.0。我们需要从表中检索下一条可用记录。我们如何控制多个并发用户检索同一记录。 我们需要读取下一个可用记录并更新列上的状态(锁的类型),以避免下一个用户检索相同的记录。我们在表中添加了Version列(乐观锁),但它似乎控制着更新 在Hibernate中实现这一点的最佳解决方案是什么 提前谢谢。 文卡特你试过锁定有问题的记录吗?Hibernate支持悲观锁定(SELECT FOR UPDATE),请查看 您还可以尝试乐观锁定,这取决于您期望的并发级别。您可以添

我们正在使用Hibernate3.6.0。我们需要从表中检索下一条可用记录。我们如何控制多个并发用户检索同一记录。 我们需要读取下一个可用记录并更新列上的状态(锁的类型),以避免下一个用户检索相同的记录。我们在表中添加了Version列(乐观锁),但它似乎控制着更新

在Hibernate中实现这一点的最佳解决方案是什么

提前谢谢。
文卡特

你试过锁定有问题的记录吗?Hibernate支持悲观锁定(
SELECT FOR UPDATE
),请查看


您还可以尝试乐观锁定,这取决于您期望的并发级别。

您可以添加一个标记,比如read(1=true/0=false),并在检索对象时使用该标记,如-

where read=0
选择后,您可以更新读取标志以限制其他用户读取此记录。如果需要,您可以像使用读取标志一样使用版本标志,因为在选择版本后更新实体将增加,并可用于区分已读/未读记录


让我知道这是否有帮助,或者我完全忽略了您的问题。

非常感谢您的快速回复。我在乐观和悲观的解决方案之间挣扎。乐观通过使用版本列(和时间戳等)来控制更新,但我希望将下一条可用记录提供给第二个用户,而不是在更新时抛出错误。悲观锁定似乎存在可伸缩性问题。有没有一种解决方案可以在更新失败时使用乐观锁定而不引发错误?我们是否需要捕获错误并重试下一条记录?也许,如果悲观锁定和乐观锁定都不适用于您(顺便说一句,不要将时间戳用作版本列),请尝试不同的方法?例如,预先读取100条记录,并将每条记录作为任务放入JMS队列中。然后,每个客户机从队列中提取一条记录并对其进行处理。没有复制、耐久性和事务也可用。这个解决方案完全独立于您的持久层。在第一个用户更新版本之前,第二个用户读取数据会发生什么情况?第二个用户在更新时将失败。我们是否需要捕获错误并重试?我也喜欢Tomasz解决方案,但希望Hibernate版本的解决方案可以简化工作和风险。请让我知道。谢谢你的好主意。你需要使用同步或悲观锁定,但会有性能损失,做一些测试,看看哪一个更好