如何在 JPA 下解锁一个实体

2023-12-24

all.

我正在使用纯 JPA 编写一个程序,其提供程序是 hibernate,底层数据库是 Azure SQL DB。该程序将在分布式环境下运行,它的许多副本将运行在不同的服务器上。

我需要执行类似的程序(例如):
1、锁定指定的学生实体,
2、检查类实体的状态,如果状态为1,则继续,否则,尝试锁定该类实体,直到获得该类的锁
3、检查status的状态(由于分布式环境,可能被另一台服务器的其他线程修改),如果仍然不是1,则做一些事情,将status修改为1,
4、解锁该类实体
5、做其他事情(仍然锁定当前学生实体)

我通过以下代码段获得锁定:

    Map<String,Object> map = new HashMap<String, Object>();
    map.put("javax.persistence.lock.timeout", 0);
    return this.getEntityManager().find( cls, id,  LockModeType.PESSIMISTIC_WRITE,map);

但是,我不知道如何在第4步释放锁, 有没有什么方法可以只释放实体上的锁,而保留其他锁?

非常感谢,任何建议都会被采纳。


您必须将锁定模式设置为无

  em.lock(myEntity, LockModeType.NONE);

See http://www.objectdb.com/java/jpa/persistence/lock http://www.objectdb.com/java/jpa/persistence/lock

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 JPA 下解锁一个实体 的相关文章

随机推荐