合并后获取实体JPA Id?

时间:2014-10-20 10:32:20

标签: jpa jpa-2.0

我有一个新创建的实体(已分离,因为尚未保存在数据库中)。此实体包含已存在于db中的另一个实体(但也已分离)。因此,我会使用em.merge(myNewEntity)来存储它。

如果我想获取新创建的ID,我会在之后使用em.flush()。然后我调用myNewEntity.getId()。使用persist我收到DB / JPA生成的ID。使用merge时,它不会。对象中的ID仍为null。那是为什么?

1 个答案:

答案 0 :(得分:16)

merge操作的结果与persist操作的结果不同 - 传递给merge的实体不会被管理。而是创建并返回实体的托管副本。这就是原始新实体不会获得id的原因。而不是

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

应该是

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