可能覆盖数据库表

时间:2016-03-30 20:10:02

标签: java hibernate java-ee database-connection

假设您有一个包含列名和姓的数据库表名table1。两个不同的客户端从java应用程序打开相同的视图,同时获取同一个人的数据。

1)第一个客户端更改了名称并按下了保存按钮以更新数据库记录。 2)Client2仍然在屏幕上看到旧记录,然后按下保存按钮以更改姓氏。

它实际上用旧名称覆盖了记录。我想在点击按钮之前检查并获取更新数据库之前的最新数据,但我不喜欢这个解决方案,因为在更新之前进行了第二次查询。

那么我们如何通过使用Hibernate并且不使用Hibarnete来解决这个问题。有什么想法吗?

1 个答案:

答案 0 :(得分:1)

当然,如果您不希望某些内容被覆盖,那么您必须在更新之前检查数据。但它并不总是一个真正的查询与良好的缓存策略。您还可以使用上次更新的时间戳来更轻松地进行比较。另一种策略是在第一个用户读取实体时锁定实体。但这对于Web应用程序来说通常不是一个好的设计,或者您必须集成一个消息传递服务,所有用户都会通知实际打开该实体的更新。但我认为这不是那么容易实现和更高级的功能。

简而言之,比较一个实体的时间戳,如果已经更新,则比较这些更改并为想要更新该实体的用户显示它们。