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字段). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容