Hibernate:合并parentEntity时的childEntity null id

时间:2014-01-13 09:13:12

标签: java hibernate postgresql hibernate-mapping

我有代码:

modifiedParentEntity.addChild(newChildEntity);
session.merge(modifiedParentEntity);
newChildEntity.getId(); // == 0!!! 

父实体具有CascadeType.ALL的子实体集合:

@Entity
public class ParentEntity {
    @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
    @JoinColumn(name = "parent_entity_id")
    private List<ChildEntity> childEntities;
}

问题:

  1. 为什么session.merge(modifiedParentEntity) chidEntity有0 id?
  2. 之后
  3. 如何以Hibernate将ID设置为modifiedParentEntity的方式同时保存chidEntitychidEntity
  4. P.S

    我使用postgres和序列生成实体ID。

1 个答案:

答案 0 :(得分:2)

merge操作不会使传递的实体受到管理,而是返回另一个受管理的实例

所以你需要从托管实例获取id,如下所示

modifiedParentEntity.addChild(newChildEntity);
ModifiedParentEntity modifiedParentManaged= session.merge(modifiedParentEntity);
session.flush()

然后从modifiedParentManaged获取子实体,然后获取其ID。