锁定JPA上的实体或数据库

沙发

JPA方法EntityManager#lock是对内存中托管实体实例立即生效还是只是将语义按需路由到数据库?

OndroMih

仅当您使用悲观锁类型之一时,才使用EntityManager#lock进行锁定。

使用悲观锁类型将锁定指令路由到DB,并等待直到锁定成功或达到超时为止。因此,该呼叫正在阻塞,并且如果未成功,则事务将回滚。

这样,对内存中对象的即时影响是间接的,但是即时的-如果未获得锁定,则事务将回滚,并且无法成功完成事务。此后修改实体对象是没有意义的,因为它们将不会持久化。但是从理论上讲,只要您捕获LockTimeoutException,就可以像其他任何普通Java对象一样修改和使用实体对象,但是我不建议这样做。

如果使用乐观锁定,则从其本质上讲,只有在检测到冲突之后,事务才会回滚。当实体将持久存储在数据库中时(通常在事务结束时,但也可能在中间刷新期间发生),才会发生这种情况。乐观锁定的目的是在明显发生碰撞的稍后时间延迟锁定。

关于JPA锁定机制的很好的文档可以在“ JPA锁定”页面中找到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在并发数据库更新时锁定实体框架代码

来自分类Dev

从数据库在Spring中写锁定实体

来自分类Dev

加载实体而不锁定数据库中的行

来自分类Dev

JPA锁定和数据库隔离级别

来自分类Dev

如何从数据库中获取实体并锁定Doctrine ORM中的相应数据库行?

来自分类Dev

netbeans jpa从数据库定制实体生成

来自分类Dev

jpa实体不更新数据库中的关系操作

来自分类Dev

实体之间的JPA eclipselink继承:Oracle数据库

来自分类Dev

JPA实体与EntityManager的简单数据库查询

来自分类Dev

没有持久/合并的JPA实体更新数据库

来自分类Dev

从数据库为JPA实体生成定制代码

来自分类Dev

JPA从数据库创建实体类

来自分类Dev

Spring Boot JPA-数据库中实体的主键

来自分类Dev

为数据库表设计JPA实体

来自分类Dev

将数据库查找映射到 jpa 实体

来自分类Dev

Azure上的导出数据库保持锁定

来自分类Dev

Azure上的导出数据库保持锁定

来自分类Dev

SQLite数据库锁定在删除命令上

来自分类Dev

.NET Core SQLite '数据库被锁定' 仅在 Linux 上

来自分类Dev

在多个数据库上使用实体框架

来自分类Dev

使用实体框架核心在读取时锁定数据库行

来自分类Dev

加载实体框架数据库连接后,Visual Studio 正在锁定

来自分类Dev

FMDB:更新时数据库被锁定

来自分类Dev

数据库锁定问题android

来自分类Dev

在SELECT INTO上锁定数据库

来自分类Dev

数据库被锁定错误sqlite ios

来自分类Dev

sqlite数据库在插入时被锁定

来自分类Dev

Delphi:数据库已锁定(SQLite)

来自分类Dev

操作错误:数据库已锁定