假设我的持久层(即在数据库上)有一个ID为1的对象
如果我执行以下操作
A a = new A();
a.setId(1);
a.setSomeField("a value");
A managed_a = entityManager.merge(a);
实体管理器是否会在DB上检索ID为1的持久化实体, 让它管理,并相应地更新它?
或者id为1的对象必须按顺序存在于持久化上下文中才能发生上述情况?
答案 0 :(得分:0)
应用于实体X的合并操作的语义为 如下:
- 如果X是分离的实体,则将X的状态复制到预先存在的管理实体实例X'相同的身份或新的托管副本X'创建了X.
- 如果X是新的实体实例,则新的管理实体实例X'已创建,并且X的状态将复制到新的管理实体实例X'。
关于第一点:如果您的数据库表中已存在ID为1的实体A,那么这意味着实体A是 DETACHED 实体。在这种情况下,实体A的字段将合并到表中的数据,因此您将此视为UPDATE操作。
关于第二点:如果您的数据库表中不存在ID为1的实体A,则实体A被视为 NEW 实体。因此,这将是一个INSERT操作。
两种情况都会导致从合并操作返回的托管实体。