假设您有一个名为 table1 的数据库表,其中包含列 name 和 surname。两个不同的客户端从 java 应用程序打开相同的 View ,并同时获取同一个人的数据。
1) 第一个客户更改了名称并按下保存按钮以更新数据库记录。 2) Client2 仍然在屏幕上看到旧记录,然后按保存按钮更改姓氏。
它实际上用旧名称覆盖记录。我想在单击按钮时在更新数据库之前检查并获取最新数据,但我不喜欢这个解决方案,因为在更新之前进行了第二次查询。
那么我们如何通过使用Hibernate而不使用Hibarnete来解决这个问题呢?有什么想法吗?
最佳答案
当然,如果您不希望某些内容被覆盖,那么您必须在更新之前检查数据。但它并不总是具有良好缓存策略的真正查询。您还可以使用上次更新的时间戳来更轻松地进行比较。另一种策略是当第一个用户读取实体时锁定实体。但这对于 Web 应用程序来说通常不是一个好的设计,或者您必须集成消息传递服务,该服务将通知所有实际打开该实体的用户进行更新。但我认为这并不是那么容易实现,而且是一个更高级的功能。
简而言之,比较实体的时间戳,如果已更新,则比较更改并向想要更新该实体的用户显示它们。
关于java - 可能覆盖数据库表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36318747/