【发布时间】:2014-12-27 21:55:32
【问题描述】:
我必须解决这种情况:在我的 Spring + JPA Web 应用程序中,我有一个类似于 excel 工作表的 jsp。
所以我有一定数量的单元格,每个单元格都保存在带有附加信息的数据库表中:每个单元格都有一行。
id | value | column | row | ...
我使用这种结构是因为我的 jsp 表中的列数是动态的。
目前,当我保存单元格时我会截断数据库表中的当前行集并重新插入所有新行。这是我发现更新大量行的最快方法。
但是现在我有一个并发问题:jsp页面可以被不同的用户同时使用,这会导致覆盖其他用户节省的问题。
我需要在我的网络应用中实现某种锁定。我发现主要有两种类型的锁:乐观与悲观。
您能建议我解决这种情况的常用方法吗?我需要在数据访问级别还是服务级别实施锁定?
注意更清楚一点:表值在用户之间共享,但可以由授权用户之间的任何人更新。
【问题讨论】:
-
我在你的问题中缺少的词是:transaction。
-
@zapl 是的,我在我的应用程序服务中使用事务,但是如何使用事务来解决我的问题?
-
这在很大程度上取决于您的用户是否会经常进行小改动或很少进行大改动。如果经常小,那么您可以检查数据是否被修改并拒绝更改(它已丢失)。使用 large seldom,您最好在用户开始修改网格时立即锁定所有内容。在修改完成之前,您可以允许其他用户进行只读访问。
-
你想锁定什么?单个值(乐观锁定不适用于您当前的截断/创建方法)或某些更高级别的实体,即作为一个整体的行集。 stackoverflow.com/questions/19454003/…
标签: java spring spring-mvc jpa concurrency