我一直在研究Entity,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时,尤其是在干净更新实体时,父ID的Id不与子实体(作为外键)一起保存。请帮助...
似乎@PreUpdate无效,@ PrePersist完全有效。
答案 0 :(得分:1)
一般来说,正确维护模型会更好。
添加addChild()方法,该方法添加子项并设置父项。那么你的模特就不会腐败。
@PreUpdate稍后在提交过程中发生(在确定需要更新对象之后)。我认为没有早期的JPA事件,但您可以使用EclipseLink PreWrite事件。您需要为此使用DescriptorEventListener,其配置方式与EntityListener相同。