jpa - 如何在JPA下解锁一个实体

标签 jpa

全部。

我正在使用纯 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);

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

关于jpa - 如何在JPA下解锁一个实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16975764/

相关文章:

java - IntelliJ : Cannot resolve symbol 'GenericGenerator'

java - 使用 JPA 关系映射的 EJB 3 持久性

java - 如何使用 java.time.LocalDateTime 设置 jadira PersistentLocalDateTime?

java - JPA + EJB : Transactions with Native Queries

java - 与实体变量名称相关的 JPA/Hibernate 查询失败

Hibernate/JPA - 可以同时使用@Id 和@EmbededId 吗?

hibernate - 生命周期异常 : Failed to start component deploying war in Tomcat

jpa - CascadeType.Persist 不使用 JPA 中的主键生成器类型表

java - 使用 Maven 生成 Hibernate 元模型中的 IllegalStateException

java - JPA:JPARepository 中的 ORDER BY 在 GROUP BY 之前