问题标签 [optimistic-locking]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hibernate - Grails乐观锁定奇怪行为
我一直试图让 GORM 在集成测试中抛出乐观锁定错误。之前有人说过,如果不使用多个线程,就不可能测试并发更新错误,但即便如此,我发现我的测试用例的行为令人惊讶:
重新挂载的Widget实例不会持久化到数据库中,但不会抛出异常!
我的测试用例相当做作,但我仍然对结果感到惊讶。
有人可以解释一下吗?
java - 定义 JPA 行为以再次设置相同的值?
我想知道,如果您为任何属性设置等于值,JPA 是否对该行为有任何定义。我在规范中没有找到任何字眼。
我已经使用 TopLink Essentials 和 Hibernate 进行了测试,如果我从数据库加载实体并再次将属性设置为相同的值,会发生什么情况。
设置相同的值
不会更改版本值。
我可以期望每个实现都有这种行为吗?我不这么认为...
nhibernate - NHibernate 在乐观的情况下覆盖并发
我已经为并发情况实现了乐观锁定。我已经使用映射文件中的版本属性链接到一个整数。
我的目标是,如果用户试图保存过期的对象,她将可以选择覆盖更改。
我很容易设法让 SaveOrUpdate 抛出异常,但是我现在如何覆盖它,以便如果用户愿意,当前对象会覆盖现有的持久对象,同时仍然更新版本号,而无需手动成员- 将变量复制到非陈旧对象中?
这似乎是一个常规的逻辑场景,但我没有看到任何内置机制。那么这是一个反模式吗?
感谢您的帮助和洞察力。
亲切的问候
LJ
java - 我应该如何处理 Java MUD 中的持久性?OptimisticLockException 处理
在获得原始开发人员许可的情况下,我正在用 Java 重新实现一个旧的 BBS MUD 游戏。目前我正在使用带有 EJB 会话外观的 Java EE 6 用于游戏逻辑和 JPA 用于持久性。我选择会话 bean 的一个重要原因是 JTA。
我对网络应用程序更有经验,如果你得到一个 OptimisticLockException,你只需抓住它并告诉用户他们的数据已经过时,他们需要重新申请/重新提交。在多用户游戏中一直以“再试一次”来回应会带来可怕的体验。考虑到我希望几个人在战斗中瞄准一个怪物,我认为 OptimisticLockException 的可能性会很高。
我的视图代码(呈现 telnet CLI 的部分)是 EJB 客户端。我应该捕获 PersistenceExceptions 和 TransactionRolledbackLocalExceptions 并重试吗?你如何决定何时停止?
我应该切换到悲观锁定吗?
在每个用户命令过度杀伤后都坚持吗?我是否应该将整个世界加载到 RAM 中并每隔几分钟转储一次状态?
我是否让我的会话外观成为一个 EJB 3.1 单例,它可以作为一个阻塞点,从而消除执行任何类型的 JPA 锁定的需要?EJB 3.1 单例用作多读取器/单写入器设计(您将方法注释为读取器和写入器)。
基本上,对于应用程序中的高并发数据更改,在向用户呈现重新提交/重试提示是不可接受的情况下,最好的设计和 java 持久性 API 是什么?
c# - Fluent NHibernate OptimisticLock.None() 导致“字符串 'none' 不是有效的布尔值。”
我正在使用以下映射:
但是当我尝试创建会话时,出现以下异常:
[FormatException:字符串 'none' 不是有效的布尔值。]
[XmlSchemaValidationException:'optimistic-lock' 属性无效-根据其数据类型' http://www.w3.org/2001/XMLSchema:boolean ',值'none'无效-字符串'none'不是有效的布尔值。]
我正在使用 NHibernate 2.1.2.4000 并且我正在使用 Fluent NHibernate 1.0RTM,但尝试了最新版本 636 只是为了确保这不是最近修复的问题或其他问题。
附带说明一下,如果我做错了,我希望能够在不增加版本的情况下对 .Bids 列表进行更改。我在Ayende 的博客上看到了一个例子,它用属性做了我想要的。
google-app-engine - GAE更新同一实体的不同字段
UserA 和 UserB 分别同时更改 objectA.filedA objectA.filedB。因为他们没有改变同一个领域,人们可能会认为没有重叠。真的吗?或者 pm.makePersistnace() 的实现实际上覆盖了整个对象......很高兴知道......
nhibernate - 乐观锁 =“版本”和动态更新 =“真”的 NHibernate 映射正在生成无效的更新语句
我有一个具有分配 ID 的实体“组”,它被添加到聚合中以保持它。这会导致一个问题,因为 NHibernate 无法判断它是新的还是现有的。为了解决这个问题,我更改了映射以使 Group 实体对 sql 时间戳版本列使用乐观锁定。这引发了一个新问题。组有一袋子对象。所以当 NHibernate 刷新一个新组到数据库时,它首先在 Groups 表中创建 Group 记录,然后插入每个子对象,然后更新 Group 记录以更新时间戳值。但是,当映射同时为dynamic-update="true"和optimistic-lock="version"时,完成更新生成的sql是无效的。
这是映射:
当映射同时包含动态更新和乐观锁时,生成的sql为:
这显然是无效的,因为没有 SET 语句。如果我删除动态更新部分,则所有内容都会在此更新语句期间更新。这使得该陈述有效,但相当不必要。
有没有人见过这个问题?我错过了什么吗?
谢谢,史蒂夫
nhibernate - Castle ActiveRecord 乐观锁定属性
Castle ActiveRecord 可以对属性进行乐观锁定吗?我发现整个类的乐观锁定,而不是单个属性。就我而言,我需要这样做,以便在集合中添加/删除元素不会更新实体的版本号(例如,在不更改任何属性的情况下将 a 添加Product
到 a不会增加版本号) .Store
Store
java - jdbctemplate and optimistic locking
In the project I'm in Hibernate and Spring jdbctemplate are mixed. I added optimistic locking. Hibernate works great with versioning but now I have to tansform all this jdbctemplate code to use versioning too.
Is there something like LockingJdbcTemplate (like SimpleJdbcTemplate)? I was thinking I could implement a generic update method
Where I could:
- append version=version+1 to columnSql
- append version=? to whereSql
- add version number to correct place within params (separate param is forcing to pass that value)
- Check that exactly 1 item was updated and throw StaleObjectStateException otherwise
Is there any library that would wrap jdbctemplate and do something similar for me? Don't want to invent something that exists... :)
java - 乐观锁批量更新
如何在批量更新中使用乐观锁定?我正在使用SimpleJdbcTemplate
单行,我可以构建更新 sql,它增加版本列值并在 WHERE 子句中包含版本。
不幸的是int[] updated = simpleJdbcTemplate.batchUpdate
,使用 oracle 驱动程序时结果不包含行数。所有元素都是 -2 表示未知的行数。
除了单独执行所有更新之外,还有其他更高效的方法吗?这些批次平均包含 5 个项目(仅),但可能多达 250 个。