问题标签 [pessimistic-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.
mysql - 捕获 ConstraintViolationException 并处理 unque 约束
我对 Hibernate 真的很生气!
我有一个数据库表(mysql),其中包含允许我构建类别树的父子关系。我有多个线程可以尝试获取,如果没有,则大致同时创建类别路径(隐含多个父子行)。
问题是我只使用 TRANSACTION_READ_COMMITTED,因此可能会出现竞争条件,其中线程可以为类别子路径创建父子路径,因为它没有找到它,然后(瞧!)另一个线程在同时。为了尝试解决这个问题,我对父/子 id 设置了唯一约束,并在完整类别路径上设置了唯一约束。然后,我希望在我的会话中,我会捕获休眠的 ConstraintViolationException,并且知道另一个线程为我写了新的关系,我查询另一个线程在 catch 子句中写的行。并尝试在该线程中继续执行会话所需的所有操作。
这是我能想到的解决多个线程同时进行获取/创建相同的长类别路径(具有多个子父子关系行)的问题的唯一方法,并确保唯一约束是坚持。
但是休眠使 ConstraintViolationException 上的会话无效并最终引发断言异常(“com.stagirite.bean.Category 条目中的空 id(发生异常后不要刷新会话)”)所以我的解决方案是不可行的。
对于不创建重复行的“获取/创建”模型,我将如何在整个应用程序中解决这个问题,而不使用悲观锁?
安迪
database - 使用 executeUpdate() 进行 Grails 悲观锁定
我找不到任何有关如何在 grails 中通过 executeUpdate() 命令使用悲观锁定的信息。这可能吗?
[更新]根据 Burt 的建议,这是我得到的查询结果。请注意,我使用了已弃用的 UPGRADE 而不是 PESSIMISTIC_WRITE 因为此选项不存在。
谢谢,
亚伯拉罕。
hibernate - 许多用户请求的悲观锁定
是否可以创建一个持续许多用户请求的悲观锁?
我很想看看在 Java EE 中是否可以使用 Hibernate 或 PHP 使用 Doctrine 或 Propel。我通过使用 Doctrine 2 进行了尝试,但这是不可能的,只能在数据库级别(每个用户请求)。
ruby-on-rails-3 - rails 悲观锁不起作用
我正在尝试在我的应用程序中使用悲观锁,但它不起作用......我正在使用 rails 3 (3.0.9) 和 activerecord-oracle_enhanced-adapter (1.3.2) 并且锁选项现在正在工作为了我... :(
该应用程序只是不在执行的 sqls 中使用 se“for update”子句...
所以我制作了这个脚本来演示生成的查询......(是的,我还查看了 development.log)......
结果是:
有人知道我错过了什么吗?
谢谢!
java - 弹簧悲观锁定
我有java下的spring项目,使用hibernate查询,我喜欢使用悲观锁定。
如何在 Spring + Hibernate 中进行悲观锁定?
编辑:
问题:
我想在一个方法中使用悲观锁定,我把这个方法从不同的方法称为方法。当我从第一种方法调用它时,悲观工作正常,但是当我从第二种方法调用它时它给出(事务无法提交)
例外:
ruby-on-rails-3 - 如何将 Rails 3 中的记录锁定特定时间?
我想要做的基本上是让用户获得对记录的锁定并将其保留一段特定的时间,以便他们可以对其进行更改,例如维基百科。因此,假设一篇维基百科文章给用户一个小时的时间来编辑它,然后其他用户可以编辑它。
我如何使用 Rails 3 实现这一目标?我已经阅读并发现悲观锁定是我应该使用的锁。鉴于此......我会在一个小时后使用什么样的机制来释放锁?
我的堆栈是 Rails 3、Heroku、PostgreSQL。
感谢您提供任何答案,如果可以的话,我很乐意看到代码,那将是非常棒的!
hibernate - 删除实体时避免 StaleObjectStateException
我有 2 个并发线程同时进入(Spring)事务服务。
使用 Hibernate,服务方法加载一些实体,处理这些实体,找到一个并将其从数据库中删除。伪代码如下:
如果两个线程同时传递相同的参数,则两者都将“找到”两个都将调用的相同实体delete
。org.hibernate.StaleObjectStateException
当会话关闭时,其中一个将失败。
我希望两个线程都返回实体,而不会抛出异常。为了实现这一点,我尝试在删除实体之前锁定(使用“select ... for update”)实体,如下所示:
我使用load()
而不是get()
因为根据休眠 API,如果已经在会话中,get 将返回实体,而 load 应该重新读取它。
如果两个线程同时进入上述方法,其中一个线程阻塞了一个锁定阶段,当第一个线程关闭事务时,第二个线程被唤醒并抛出一个org.hibernate.StaleObjectStateException
. 为什么?
为什么锁定的负载不只是返回null?我怎么能做到这一点?
persistence - EJB3 持久化 NamedQuery 中的 LockMode
我们如何在 EJB3 Persistence NamedQuery 中指定 LockMode?我想将悲观锁定模式添加到我现有的选择中,以便我可以在必要时进行更新,但令人惊讶的是查询对象没有 setLockMode(xxx) 方法(我的理解是如果 JPA,EJB3 持久性的子集,公开 setLockMode,EJB3 持久性应该有可用的方法也)。
我假设我不必手动将查询更改为“选择更新”。
谢谢凯文
php - 如何在 php/mysql Web 应用程序中实现悲观锁定?
如何在 php/mysql Web 应用程序中实现悲观锁定?
- 网络用户打开一个页面来编辑一个数据集(行)
- 网络用户单击“锁定”按钮,因此其他用户可以读取但不能写入此数据集
- 网络用户进行一些修改(可能需要 1 到 30 分钟)
- 网络用户点击“保存”或“取消”,“锁定”被移除
在这种情况下,php/mysql 中有标准方法吗?如果网络用户从不点击“保存”/“取消”但关闭了互联网浏览器,会发生什么?
java - 行被另一个事务更新或删除(或未保存值映射不正确)
我有一个在网络服务器上运行的 java 项目。我总是遇到这个异常。
我阅读了一些文档,发现悲观锁定(或乐观,但我读到悲观更好)是防止此异常的最佳方法。
但我找不到任何清楚的例子来解释如何使用它。
我的方法是这样的:
尽管:
Email
是一个 Hibernate 类(它将是数据库中的一个表)getEmailById(String id)
是一个返回 an 的函数email
(这个方法没有用 注释@Transactional
)updateEmail(email)
: 是一种更新电子邮件的方法。
注意:我使用 Hibernate 进行保存、更新等(例如session.getcurrentSession.save(email)
:)
例外: