0

我一直在研究一个实体,oneToMany 关系,问题是每当我使用它时:

//Parent class    

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, fetch = FetchType.EAGER, 
        targetEntity = FeedbackCategory.class, mappedBy = "parent")    
@PrivateOwned
@OrderBy("category ASC")
private List<Child> children;

//... other code here, i.e. getters-setters

@PrePersist
@PreUpdate
void prePersistUpdate() {

  // set the foreign key of child to this.ID
  if(children != null && !children.isEmpty())
  {
      for(Child ch: children)
      {
          ch.setParent(this);       
      }          
  }
}

在更新 Parent.class 时,尤其是在干净更新实体时,Parent 的 Id 没有与子实体(作为外键)一起保存。请帮忙...

似乎@PreUpdate 不起作用,@PrePersist 完全起作用。

4

1 回答 1

1

一般来说,正确维护您的模型会更好。

添加一个 addChild() 方法,用于添加子项并设置父项。那么你的模型就不会腐败了。

@PreUpdate 发生在提交过程的后期(在确定需要更新对象之后)。我认为没有更早的 JPA 事件,但您可以使用 EclipseLink PreWrite 事件。为此,您将需要使用 DescriptorEventListener,它的配置方式与 EntityListener 相同。

于 2012-04-11T13:42:14.453 回答