em.merge将对分离实体的状态做什么?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了em.merge将对分离实体的状态做什么?相关的知识,希望对你有一定的参考价值。

我有这样的代码

private Identifiable updateEntityInternal(JPABaseEntity entity) {

        Identifiable updated = null;
        try {
            updated = em.merge(entity);
            em.flush();

据我所知em.merge创建新实体,将状态从“旧”实体复制到新实体,管理新实体,分离“旧”实体。

我需要从实体中检索一些属性(数组,Lazy init)。

那么如果我填充到这个api的实体已经分离了会发生什么。这是否意味着在合并(复制状态)时它无法从我传递的实体中检索数组,因为它是分离的?那么合并后的新托管实体将不会有这个数组?

答案

否....如果分离的实体不包含该集合,因为它由于延迟加载而未加载,那么您尝试再次合并它,它将具有相同的状态(就好像它有一个卸载的集合,因为它的延迟加载)....但是如果最初你加载了集合(例如通过显式调用它的getter)然后你将它设置为null然后你分离它并尝试再次合并它,它将保存为空引用集合(即带有空集合)

以上是关于em.merge将对分离实体的状态做什么?的主要内容,如果未能解决你的问题,请参考以下文章

android如何跨片段分离/附加保留视图状态

分离实体和被管理实体

EF--EntityState相互转换

不立即分离片段

Spring JPA:没有正在进行的事务

实体框架分离的实体不相等