gpt4 book ai didi

java - JPA 和默认锁定模式

转载 作者:太空狗 更新时间:2023-10-29 22:32:58 24 4
gpt4 key购买 nike

通过JPA,我们可以手动使用OPTIMISTICPESSIMISTIC 锁定来处理事务中的实体更改。

我想知道如果我们不指定这两种模式中的一种,JPA 将如何处理锁定?没有使用锁定模式?

如果我们不定义显式锁定模式,数据库完整性会丢失吗?

谢谢

最佳答案

我已经浏览了 Java Persistence API 2.0 Final Release 的第 3.4.4 节 锁定模式规范,虽然我找不到任何特定的(它没有说明this是默认的或类似的东西),但有一个脚注说明了以下内容。

The lock mode type NONE may be specified as a value of lock mode arguments and also provides a default value for annotations.

该部分是关于 LockModeType 的种类可用值及其用法,并描述了哪些方法接受此类参数等等。

所以,正如它所说,LockModeType.NONE 是注释的默认值(JPA,左右注释)我想当你使用 EntityManager.find(Class, Object)使用默认的 LockModeType

还有一些其他微妙的暗示可以强化这一点。 3.1.1 节 EntityManager 接口(interface)

The find method (provided it is invoked without a lock or invoked with LockModeType.NONE) and the getReference method are not required to be invoked within a transaction context.

这是有道理的。例如,如果您使用 MySQL 作为数据库并且您选择的数据库引擎是 InnoDB,那么(默认情况下)您的表将使用 REPEATABLE READ ,如果您使用其他 RDBMS 或其他数据库引擎,这可能会改变。

现在我不确定隔离级别与 JPA 锁定模式有什么关系(尽管看起来是这样),但我的观点是不同的数据库系统不同所以 JPA 不能为你决定(至少根据规范)默认使用什么锁定模式,因此如果您不另行指示,它将使用 LockModeType.NONE

我还找到了 an article regarding isolation levels and lock modes ,您可能想阅读它。

哦,然后回答你的最后一个问题。

If we don't define an explicit locking mode, can the database integrity be lost?

取决于,但如果您有并发事务,那么答案可能是

关于java - JPA 和默认锁定模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13568475/

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