问题:
使用 session.saveOrUpdate(e) 时与其他实体有关系的对象,可能会抛出异常,指示“具有相同标识符值的不同对象已与会话关联。”
说明:
当 Hibernate 在单个会话中检测到具有相同标识符的同一实体的多个实例时,会发生此异常。下面是该情况的简化说明:
解决方案:
解决方案取决于所需的行为:
1.通过合并维护关系:
为了防止重复实例,请使用 session.merge(e) 而不是 saveOrUpdate。合并假设实体的分离实例(在本例中为实体 A)应附加到会话,并且任何更改都应合并到附加版本中。
2.确保分配的一致性:
如果要继续使用 saveOrUpdate,请确保将实体的相同实例分配给所有相关实体。这意味着当将实体 A 添加到实体 B 和实体 C 的关系时,应使用实体 A 的同一实例。
示例:
<code class="java">// Ensuring the same instance of rolebean is assigned to both userbean and groupbean rolebean.setUserbean(userbean); groupbean.getGroups().add(rolebean);</code>
注意:
具体修复取决于执行分配的代码。建立关系时必须确保使用相同的实体实例,以避免重复对象问题。
以上是为什么我在 Hibernate 中收到'具有相同标识符的重复对象”异常?的详细内容。更多信息请关注PHP中文网其他相关文章!