Hibernate 休眠4合并分离的对象两次
嗨,我有一个conversation.access作用域bean,它保存着我的userobjectHibernate 休眠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
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)