Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:merge parentEntity上的childEntity空id_Java_Hibernate_Postgresql_Hibernate Mapping - Fatal编程技术网

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
    id
  • 如何保存
    modifiedparentity
    chidEntity
    ,使Hibernate将id设置为
    chidEntity
  • 另附

    我使用postgres和sequences生成实体的ID。

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

    因此,您需要从托管实例中获取id,如下所示

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

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

    我使用手动刷新模式,因此我不能在句柄方法的中间使用
    flush
    。我可以通过在合并父实体之前添加
    session.save(newChildEntity)
    来解决此问题。确定。在您的情况下,最好在合并父级之前对子级进行管理。在上述样式中,如果您不使用flush,则只有在事务完成后,才会使用id设置子级。