我有代码:
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;
}
的问题: 的
session.merge(modifiedParentEntity)
chidEntity有0
id?modifiedParentEntity
的方式同时保存chidEntity
和chidEntity
?的 P.S :
我使用postgres和序列生成实体ID。
答案 0 :(得分:2)
merge操作不会使传递的实体受到管理,而是返回另一个受管理的实例
所以你需要从托管实例获取id,如下所示
modifiedParentEntity.addChild(newChildEntity);
ModifiedParentEntity modifiedParentManaged= session.merge(modifiedParentEntity);
session.flush()
然后从modifiedParentManaged
获取子实体,然后获取其ID。