Java [Hibernate]将临时对象与子对象合并

Java [Hibernate]将临时对象与子对象合并,java,hibernate,mapping,Java,Hibernate,Mapping,我对合并有些问题。我的更新方法是这样工作的: void update(Parent parent) { evict(parent); merge(parent); } 我的班级: Parent { Long id; List<Children> childrens; @OneToMany(targetEntity =ChildrenImpl.class, fetch=FetchType.LAZY) @JoinColumn(name="PAREN

我对合并有些问题。我的更新方法是这样工作的:

void update(Parent parent) {
    evict(parent);
    merge(parent);
}
我的班级:

Parent {

  Long id;

  List<Children> childrens;

  @OneToMany(targetEntity =ChildrenImpl.class, fetch=FetchType.LAZY)
  @JoinColumn(name="PARENT")
  @org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
  List<Children> getChildrens(){...}

  @Id
  Long getId() {...}

}



Children{

  Parent parent;

  @ManyToOne(targetEntity = ParentImpl.class, fetch = FetchType.LAZY)
  @org.hibernate.annotations.Cascade(value = org.hibernate.annotations.CascadeType.ALL)
  @JoinColumn(name = "PARENT", nullable = false)
  Parent getParent(){...}

}
顺序良好,但子项在insert中没有父id。当父对象被持久化到数据库中时,一切正常,然后子对象总是有一个好的id

我应该怎么做才能从瞬态对象(从持久化对象)获取id

问候
KZ.

您无法从瞬态对象获取id,根据定义,瞬态对象没有id


如果创建新对象,为什么要进行合并?创建新对象时,应将其保存。如果更改现有对象的值,则应更新该对象。只有当持久化的对象分离,并且需要重新附加它时,才应该进行合并。

是否尝试先通过session.saveOrUpdate()保存临时实例,以便将id附加到实体?在执行子对象的插入时,是否在调试器中检查实体是否具有id?以非常复杂的对象图为例。假设我将其导出为XML,进行一系列更改,然后将其重新导入。如果必须获取现有的持久对象,然后将其与旧对象及其所有级联和依赖项进行比较,并对其进行更新,那么维护起来可能非常困难。相反,最好用新对象创建一个临时对象,比较新旧对象,向新临时对象添加ID,合并并保存。这就是我想做的,但你们是说这是不可能的吗?如何区分具有notNull Id的新对象和分离的对象?我想这是不可能的。所以,合并具有设置id的新对象是可以的。如果我们的实体是不可变的,我们可能会有这个逻辑-我们必须创建新对象。
INSERT PARENT //everythings here is ok.

INSERT CHILDREN // but without parent id(id=null)