合并后如何获取实体JPA Id?

8
我有一个刚创建的实体(因为还没有保存在数据库中,所以是分离状态)。这个实体持有另一个已经存在于数据库中的实体(但也是分离状态)。因此,我会使用em.merge(myNewEntity)来存储它。
如果我想要获取新创建的ID,我将在之后使用em.flush()。然后我调用myNewEntity.getId()。用persist的方式,我会收到由DB/JPA生成的ID。但是用merge的方式却不是这样。对象中的ID仍然保持为null。为什么会这样呢?
1个回答

19
merge操作的结果与persist操作不同 - 传递给merge的实体不会变为托管状态。相反,将创建并返回实体的托管副本。这就是为什么原始新实体不会获得标识符的原因。因此,应该使用:
em.merge(newEntity);
Long id = newEntity.getId();

应该是这样的

managedEntity = em.merge(newEntity);
Long id = managedEntity.getId();

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - feder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接