Mysql和java:在并发更新时如何处理多个用户

Mysql和java:在并发更新时如何处理多个用户,java,mysql,orm,locking,Java,Mysql,Orm,Locking,我几乎到处找过我知道的术语,但没有找到任何好的解决方案。我正在尝试做一个小应用程序,基本上做簿记。我使用java作为前端,使用MySQL作为数据库 该应用程序必须支持多个用户(3-4),因此,如果两个用户想要编辑同一行,我想实施某种保护 我研究过的东西以及我不知道是否应该使用它们的原因: Hibernate:我看到多个线程说ORM正在使事情变得复杂 乐观/悲观锁定:使用hibernate或选择。。。对于我读过的更新,它不利于并发性 我不知道还要调查什么 感谢阅读您可以从应用程序中对数据库中的

我几乎到处找过我知道的术语,但没有找到任何好的解决方案。我正在尝试做一个小应用程序,基本上做簿记。我使用java作为前端,使用MySQL作为数据库

该应用程序必须支持多个用户(3-4),因此,如果两个用户想要编辑同一行,我想实施某种保护

我研究过的东西以及我不知道是否应该使用它们的原因:

  • Hibernate:我看到多个线程说ORM正在使事情变得复杂
  • 乐观/悲观锁定:使用hibernate或选择。。。对于我读过的更新,它不利于并发性
我不知道还要调查什么


感谢阅读

您可以从应用程序中对数据库中的行实施某种类型的锁定,例如,添加一列“lockedby”,其中客户端的标识符作为值。在应用程序中,在授予编辑行的权限之前,请检查该标志。如果程序仍处于编辑模式,应用程序应重新获取锁,因此如果客户端失败,行不会永远保持锁定。只是一个想法,但我认为这是一个可能的解决方案


另一种方法是在提交更新之前检查行是否已更改。可以很容易地通过检查内容的哈希和来实现。

也许可以作为参考?当你执行UPDATE语句时,MySQL中似乎会自动放置排他锁。我已经读过了,这在MySQL方面很好,但是用户仍然可以同时编辑同一行,因此他们只会覆盖他们的编辑,因为他们不知道有人已经在编辑。我没弄错吧?我想是吧?老实说,我在MySQL方面没有并发方面的经验,但我想做一些研究来帮助你。无论如何,谢谢你,我不知道隐式锁。如果我理解正确,你提到的客户端就是用户?如果是这样,我应该在用户尝试修改行时将其id添加到新列中,如果成功,我可以重置插入新列中的值?此外,如果是同一个用户,如果在新列中是他的id,他可以重新获取锁?我希望您有一个客户机,用户使用该客户机获取和修改数据库中的数据。如果他们都直接在数据库上工作,这意味着你没有一个特殊的客户机,你可以在其中编程逻辑,那么这种方法是不合适的。哦,客户机作为用户的软件?是的,情况就是这样。我的意思是他们在连接到软件时得到了一个会话,这意味着我可以将用户的ID存储在锁列中。是的,我认为这是一个很好的标识符。我可能会存储两个字段。一个用于锁定行的用户id,另一个用于时间戳。例如,大约五分钟后,外观将“过期”,这意味着该字段在当时仍然存在,但已过时,因此其他用户的软件客户端知道,它可以将锁提供给其他用户。如果一个客户机挂起,这将是“失败”的情况。通常,当你完成后,你会把锁还给我。不客气。希望能有帮助。祝你的解决方案好运。