【发布时间】:2019-03-30 18:07:53
【问题描述】:
merge() 方法的工作:
merge(source entity) 方法会将分离的实体状态(源)复制到托管实体实例(目标)。如果合并实体在当前会话中没有等价物,则将从数据库中获取一个。即使在合并操作之后,分离的对象实例也将继续保持分离状态。
我的问题是:
为什么merge() 方法将分离的实体状态复制到托管实体,而不是将相同的分离实体传递给持久化上下文?
【问题讨论】:
merge() 方法的工作:
merge(source entity) 方法会将分离的实体状态(源)复制到托管实体实例(目标)。如果合并实体在当前会话中没有等价物,则将从数据库中获取一个。即使在合并操作之后,分离的对象实例也将继续保持分离状态。
我的问题是:
为什么merge() 方法将分离的实体状态复制到托管实体,而不是将相同的分离实体传递给持久化上下文?
【问题讨论】:
<T> T merge(T entity) 方法是根据 JPA 规范实现的。 https://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#merge-T-
返回:
状态合并到的托管实例
至于:
为什么不将相同的分离实体传递给持久化上下文
这正是它的作用。为了合并数据,会创建一个托管实体(或从缓存中获取),然后更新并返回。
【讨论】: