java当关闭相关(相同)的entityManager时,entityManager以前找到或获取的entites是什么?
我正在使用ThreadLocal和请求/实体模式来获取实体。这种情况下,我关闭一个entityManager,后台有一些实体,我可以编辑、复制、修改,然后我想将其保存或与一个新的entityManager合并。我不知道这是一个合法的或完全正确的解决方案
我没有找到关于这个的文章、问题和答案。也许我意识太多了,但我想知道在以这种方式关闭entityManager时是否存在一些已知问题或问题。。。(我想可能是相关实体在置零、关闭后分离)
我以本地方式管理实体资源
还是?如果我感觉良好:entityManager只是通往持久性上下文的桥梁/路径,entityManager是可以替换的,那么托管的Entite和entityManager之间没有真正或严格的联系(从这个意义上说)
# 1 楼答案
当您关闭EntityManager时,其所有受管实体都会分离。这没什么错。您仍然可以将分离的实体作为java对象使用,但更改它们的属性不会影响数据库(除非重新连接数据库)。此外,一旦实体被分离,您就不能再遵循在实体仍被连接时尚未初始化的延迟加载关系
稍后,可以通过调用分离的实体上的
merge()
方法,将其重新连接到不同的EntityManager。例如:为了防止在分离实体(例如,另一个应用程序修改相应的行)时在数据库中“幕后”进行更改,可以使用@Version字段。每次修改实体时,其版本都会更改。如果试图合并分离的实体,而从数据库检索到的当前版本具有不同的版本,则它将抛出
OptimisticLockException