java - Spring hibernate 锁是否适用于不同机器上的其他线程?

标签 java spring hibernate transactions locking

HibernateTemplate().refresh(obj, LockMode.UPGRADE);

上面的行会阻止所有线程(包括不同机器上的线程)继续执行吗?

还有这个锁什么时候会被释放?

是在 hibernate session 结束时吗?

获取锁并在锁释放时唤醒现有线程的成本有多高? 谢谢

最佳答案

Hibernate 锁定请求被委托(delegate)给数据库,因此不会发生内存中 Java 锁定。

LockMode.Upgradeequivalent to PESSIMISTIC_WRITE ,这意味着在关联的数据库行上采用了独占锁。

当前锁将阻止其他事务获取该特定行的共享/独占锁,直到当前事务结束(提交或回滚)。

如果其他线程不需要获取此特定的数据库行锁,则不会发生争用。

线程不会被唤醒,就像 Java 中那样。等待锁的数据库进程永远不会进入休眠状态。您也可以配置获取锁的时间间隔。

关于java - Spring hibernate 锁是否适用于不同机器上的其他线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28255368/

相关文章:

java - 如何检索音量参数并使其显示在 result.jsp 中

java - 为什么 JpaRepository.findAll() 方法从我的 Oracle 数据库中获取错误的数据?

hibernate - JPA:如何在静态 JPA 元模型中对 NUMBER 列执行 LIKE?

java - hibernate查询缓存和时间戳

java - PostgreSQL 和 hibernate - 函数 rownumber() 不存在

Java:使用对象名称的字符串输入创建对象

java - Mongo java 驱动程序表示 PojoCodec 不支持具有泛型类型的顶级类

java - 如何将 800x600 图像放入 jLabel 中,而无需滚动即可查看整个图像

java - 无法在 spring rest 模板客户端中找到请求目标的有效认证路径

java - 需要启用/禁用 CacheConnection 的 oracle JDBC 驱动程序的数据源