Hibernate 休眠4合并分离的对象两次

Hibernate 休眠4合并分离的对象两次,hibernate,merge,Hibernate,Merge,嗨,我有一个conversation.access作用域bean,它保存着我的userobject public class UserEntity { @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "userEntity") @JsonIgnore private List<UserAuthorityEntity> user

嗨,我有一个conversation.access作用域bean,它保存着我的userobject

public class UserEntity {
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true, mappedBy = "userEntity")
    @JsonIgnore
    private List<UserAuthorityEntity> userAuthorityEntities = new ArrayList<UserAuthorityEntity>();
}
“AuthoritiesEntityUserEntityPK”表示他正在查找我在第二个请求中删除的对象


有什么问题吗?

我遇到了同样的问题。我尝试了四种方法来解决这个问题。所有的工作

 1. change merge(User) to saveOrUpdate(User)
 2. After merge, call session.clear()
 3. Use a new session for the second merge 
 4. User = merge(User)

然后我做了一些研究,想知道是什么让这些解决方案成为可能。注意第二种解决方案。根据
clear
清除一级缓存。所以我相信在你们合并之后,数据仍然以某种方式存储在缓存中<代码>清除将分离与此会话关联的所有对象

注:第一种解决方案。根据
saveOrUpdate
merge
之间的区别,
saveOrUpdate
使对象持久化,而
merge
返回持久化对象。再次合并时,由于参数不是持久的,hibernate使用缓存从db加载对象。这将导致奇怪的查询

所以我想到了第四个解决方案。这将使您的用户成为附加对象。然后,当您再次合并时,它正在合并持久对象。Hibernate这次不查询数据库

至于第三种解决方案。它来自一次审判

这是我对这个问题的理解。不确定是否准确。但我希望这能有所帮助。为了安全起见,我建议您使用
解决方案1
解决方案4

 1. change merge(User) to saveOrUpdate(User)
 2. After merge, call session.clear()
 3. Use a new session for the second merge 
 4. User = merge(User)