Java Hibernate:merge parentEntity上的childEntity空id
我有密码:Java Hibernate:merge parentEntity上的childEntity空id,java,hibernate,postgresql,hibernate-mapping,Java,Hibernate,Postgresql,Hibernate Mapping,我有密码: modifiedParentEntity.addChild(newChildEntity); session.merge(modifiedParentEntity); newChildEntity.getId(); // == 0!!! 其中,父实体具有级联类型的子实体集合。所有: @Entity public class ParentEntity { @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGE
modifiedParentEntity.addChild(newChildEntity);
session.merge(modifiedParentEntity);
newChildEntity.getId(); // == 0!!!
其中,父实体具有级联类型的子实体集合。所有:
@Entity
public class ParentEntity {
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER, orphanRemoval = true)
@JoinColumn(name = "parent_entity_id")
private List<ChildEntity> childEntities;
}
@实体
公共类父实体{
@OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,orphan=true)
@JoinColumn(name=“父实体id”)
私人实体名单;
}
问题:
session.merge(modifiedparentity)
chidEntity具有0
idmodifiedparentity
和chidEntity
,使Hibernate将id设置为chidEntity
modifiedParentEntity.addChild(newChildEntity);
ModifiedParentEntity modifiedParentManaged= session.merge(modifiedParentEntity);
session.flush()
然后从
modifiedParentManaged
中获取子实体,然后获取其id。我使用手动刷新模式,因此我不能在句柄方法的中间使用flush
。我可以通过在合并父实体之前添加session.save(newChildEntity)
来解决此问题。确定。在您的情况下,最好在合并父级之前对子级进行管理。在上述样式中,如果您不使用flush,则只有在事务完成后,才会使用id设置子级。