gpt4 book ai didi

java - JPA表独占锁

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:05:13 26 4
gpt4 key购买 nike

是否有可能以数据库不可知的方式使用 JPA 独占锁定整个表(例如不使用 native 查询)?到目前为止我只看到EntityManager.lock(*)但这只锁定给定的记录。

最佳答案

我认为 JPA 本身不支持这一点——您总是锁定单个实体或作为查询结果的每个实体。始终允许插入,因为它们是新实体。您可以使用 native 查询通过数据库服务器支持的 SQL 触发锁定,或者您需要以编程方式锁定您的插入。

以编程方式我的意思是您需要在每次插入之前获取锁。您可以通过创建一个单独的锁实体类来实现,每个实体对应一个您要锁定的表,然后在每次插入之前,您使用读锁锁定特定实体,如下所示:

em.createQuery("select l from TableLock l where l.entity = :entityName", TableLock.class)
.setParameter("entityName", MyEntity.class.getSimpleName())
.setLockMode(LockModeType.PESSIMISTIC_READ)
.getResultList();
em.persist(new MyEntity());

当然,你还应该检查数据库中是否存在锁定实体,如果不存在,则先创建它,实体字段为你的实体名称。

关于java - JPA表独占锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32336481/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com