我有一个新创建的实体(已分离,因为尚未保存在数据库中)。此实体包含已存在于db中的另一个实体(但也已分离)。因此,我会使用em.merge(myNewEntity)
来存储它。
如果我想获取新创建的ID,我会在之后使用em.flush()
。然后我调用myNewEntity.getId()
。使用persist
我收到DB / JPA生成的ID。使用merge
时,它不会。对象中的ID仍为null
。那是为什么?
答案 0 :(得分:16)
merge
操作的结果与persist
操作的结果不同 - 传递给merge
的实体不会被管理。而是创建并返回实体的托管副本。这就是原始新实体不会获得id的原因。而不是
em.merge(newEntity);
Long id = newEntity.getId();
应该是
managedEntity = em.merge(newEntity);
Long id = managedEntity.getId();