加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 关于线程安全和JPA EntityManager

发布时间:2020-12-15 04:19:02 所属栏目:Java 来源:网络整理
导读:假设我们有两个相互依赖的实体和每个实体的DAO Entity1 - * Entity2Entity2 现在假设我们有两个线程从数据库中提取一些数据,Thread1要求Entity1Dao获取一些初始化依赖字段的对象,同时Thread2尝试使用Entity2Dao获取相同的Entity2对象(已经检索过). Entity1Da
假设我们有两个相互依赖的实体和每个实体的DAO

Entity1 -> * Entity2
Entity2

现在假设我们有两个线程从数据库中提取一些数据,Thread1要求Entity1Dao获取一些初始化依赖字段的对象,同时Thread2尝试使用Entity2Dao获取相同的Entity2对象(已经检索过).

Entity1Dao创建EntityManager(em1)并检索数据,Entity2Dao将创建不同的EntityManager(em2)以从数据库获取查询对象.

问题:在em1关闭之前,em2是否保持锁定状态?如果不是,我们应该在“包含请求对象的其他实体管理器”上获得异常吗?

解决方法

不会.每个EntityManager都会返回实体的不同实例.

然后,并发事务可能会写入相同的行,最后一个将获胜,除非您实现乐观并发(通过向实体添加@Version字段).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读