如何解锁JPA下的一个实体

如何解锁JPA下的一个实体,jpa,Jpa,全部 我正在使用纯JPA编写一个程序,它的提供者是hibernate,底层数据库是Azure SQL DB。该程序将在分布式环境下运行,它的许多副本将在不同的服务器上运行 我需要做一些类似的程序(例如-): 1、锁定指定的学生实体, 2、检查clas实体的状态,如果状态为1,则继续,否则,尝试锁定该类实体,直到获得该类的锁定 3、检查状态的状态(可能由于分布式环境而被另一台服务器的其他线程修改),如果仍然不是1,那么做一些事情,将状态修改为1, 4、解锁该类实体 5、做其他事情(仍然持有当前学生

全部

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

我需要做一些类似的程序(例如-):
1、锁定指定的学生实体,
2、检查clas实体的状态,如果状态为1,则继续,否则,尝试锁定该类实体,直到获得该类的锁定
3、检查状态的状态(可能由于分布式环境而被另一台服务器的其他线程修改),如果仍然不是1,那么做一些事情,将状态修改为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);
Map Map=newhashmap();
put(“javax.persistence.lock.timeout”,0);
返回这个.getEntityManager().find(cls,id,LockModeType.悲观_WRITE,map);
但是,我不知道如何在步骤4中解除锁定, 是否有任何方法可以只在实体上实现锁,而保留其他锁


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

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

  em.lock(myEntity, LockModeType.NONE);

请参见

某些数据库(如MySQL)在当前事务结束前始终保持锁定。将锁设置为
NONE
无效。只是一个小问题:一般来说,这意味着通常不需要解锁。因此,在事务结束时所有内容都被解锁,对吗?在事务结束时所有内容都被解锁:)