4

全部。

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

我需要执行一些类似的程序(例如):
1,锁定指定的学生实体,
2,检查班级实体的状态,如果状态为1,则继续,否则,尝试锁定班级实体,直到获得这个类的锁
3,检查status的状态(由于分布式环境,可能被另一个服务器的其他线程修改),如果仍然不是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);

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

非常感谢,任何建议都会被占用。

4

1 回答 1

5

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

  em.lock(myEntity, LockModeType.NONE);

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

于 2013-06-07T08:33:02.940 回答