Hibernate中的集合作为最终用CascadeType.ALL和clear()在setter()中

时间:2014-02-21 09:15:30

标签: java hibernate jpa cascade

我有以下Hibernate实体

<!-- language: java -->
@Entity(name = "Someentity")
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public class SomeEntity extends SPCEntity{

@OneToMany(fetch = FetchType.LAZY, mappedBy = "bom", cascade = CascadeType.ALL, orphanRemoval=true)
private final Set<Note> notes = new HashSet<>();

public void setNotes(final Set<Note> notes) {
    this.notes.clear();
    this.notes.addAll(notes);
}
}

相应的注释类

@Entity(name = "NOTE")
    public class BomNote extends Note {
    @ManyToOne(fetch = FetchType.LAZY, optional = false, cascade = {CascadeType.PERSIST})
@Cascade(org.hibernate.annotations.CascadeType.SAVE_UPDATE)
@JoinColumn(name = "bom_id")
private SomeEntity bom; 

    ... getters and setters...
}

对于音符集合使用final是否有风险,并且在添加所有已回复的音符之前清除音符组会有风险。

据我所知 - 不是要修改hibernate提供的持久集合。使用此解决方案,hiberate列表永远不会在对象中设置,但它始终使用初始列表对象。

这可能会导致hibernate的副作用混乱,特别是对于级联类型ALL?

提供任何帮助和建议。

0 个答案:

没有答案