10得票3回答
在RESTful应用中的乐观锁定

我们正在开发一个RESTful应用程序,数据层将由Hibernate处理,但我们不确定如何处理实体的更新。 我们计划执行以下操作: 1)客户端通过id请求实体 2)Hibernate加载实体,将请求的字段(始终包括版本号)复制到DTO中,然后将其转换为JSON并发送给客户端 3)客户端管理...

9得票2回答
ETags和集合

许多REST API提供了搜索资源的能力。 例如,可以使用以下HTTP请求获取类型为A的资源: GET /A?prop1={value1}&prop2={value2} 我正在使用乐观锁,因此希望为每个类型A的返回资源返回一个版本。迄今为止,我在仅使用其ID获取单个资源时使用E...

9得票1回答
NHibernate的StaleObjectStateException之后如何优雅地合并对象图?

我们正在尝试在抛出StaleObjectStateException后合并对象以保存合并后的副本。 以下是我们的环境情况: - 多用户系统 - WPF桌面应用程序,SQL Server 2008数据库 - NHibernate 3.1.0.4000,FluentNHibernate 1.2...

9得票6回答
如何为Grails应用程序进行并发修改测试

我想运行模拟多个用户同时修改某些数据的测试,应用程序是Grails。 有没有插件/工具/机制可以高效地实现这一点?它们不必特定于Grails。应该可以并行触发多个操作。 我更喜欢在功能级别上运行测试(到目前为止,我正在使用Selenium进行其他测试),以便从用户角度查看结果。当然,如果您...

8得票1回答
何时明确排除乐观锁定(Hibernate)?

在使用Hibernate的@OneToMany关系时,什么情况下明确排除乐观锁定是合适的? 我一直在阅读有关Hibernate的文章,基本上说任何对子实体的更新都会导致父实体的乐观锁定,这通常是不需要的。关键词在于“通常”... 有人能更精确地解释在这种关系中何时需要或不需要乐观锁吗? 以...

8得票1回答
使用Hibernate和Spring实现乐观锁

我正在尝试实现乐观锁定,以避免丢失更新的情况。在我的应用中,当两个用户获取相同的记录并且第一个用户使用一些更改进行更新时,第二个用户看到相同的记录却无法看到第一个人的更改,并自己进行了一些更改并更新了它。由此导致了第一个人的更改被覆盖。为了防止这种情况,我编写了以下代码,但问题仍然存在。我对这...

8得票1回答
你如何在REST中实现粗粒度乐观锁?

我已经为我的REST资源实现了乐观锁,这些资源与数据库表具有一对一的映射关系,通过将在GET请求中返回的版本号传回到PUT请求中。如果在我执行GET和PUT之间数据库中的版本号发生更改,则会发生乐观锁异常。这是一个相当简单的设计。 现在,如何为映射到多个数据库表的复合REST资源实现相同的操...

8得票2回答
如果我需要第二次读取版本,为什么应该使用可重复读(或更高)的隔离级别?

我已阅读马丁·福勒(Martin Fowler)的书籍章节“乐观离线锁定”。 作者描述了以下示例(如果我理解正确的话): 有两个实体:Order 和 Client。涉及两项业务交易: 1. 第一笔交易计算订单的税款金额。税款金额取决于 Order points 和客户地址。 2. 第二笔...

8得票2回答
脏属性更改: 自从何时更改集中的值变成了字符串(而不是对象)?

我正在使用乐观锁定来防止在竞争条件下人们覆盖彼此的更改。 自从我将Rails从 5.1 升级到 5.2 后,我的规范测试出现了问题,我追踪发现,在 changes 数组中,与文件上传相关的更改不再是 Uploader 元素,而是裸字符串。 之前: [1] pry(#<User&gt...

7得票3回答
使用乐观锁时可能会出现死锁吗?

众所周知,有两种锁定策略:乐观锁定 vs. 悲观锁定。 悲观锁定是指您将记录锁定以供您独占, 直到您完成为止。它的完整性比乐观锁定好得多,但需要您注意应用程序设计,以避免死锁。 另外,乐观并发控制与多版本并发控制(Oracle或MSSQL-Snapshot/MVCC-RC)不同:乐观锁定与...