Hibernate CascadeType内部关联注释vs outside

时间:2015-06-03 09:17:10

标签: java hibernate

@OneToMany注释中插入的CascadeType选项与@Cascade中插入的选项有什么区别?哪个是优先权,是两个被忽略的一个?

    @OneToMany(mappedBy="page", fetch=FetchType.EAGER, cascade = {CascadeType.REMOVE, CascadeType.PERSIST})
    @Cascade({org.hibernate.annotations.CascadeType.SAVE_UPDATE, org.hibernate.annotations.CascadeType.DELETE})
    private List<Tag> tags;

3 个答案:

答案 0 :(得分:1)

Hibernate Documentation,对此问题很清楚。 他们特别建议在SAVE_UPDATE的情况下使用它们。

答案 1 :(得分:1)

没有区别。

如果OneToMany是JPA注释(javax.persistence.OneToMany),则不能使用Hibernate&#39; cascade&#39;内。你必须使用JPA级联。

@Cascade注释特定于hibernate,而不是JPA。

当您编写类似:CascadeType.SAVE_UPDATE之类的内容时,这意味着当您使用hibernate方法时会使用级联&#39; saveOrUpdate&#39;,因此当您使用hibernate方法保存,删除时,...对象使用@Cascade注释。如果使用JPA方法,请在@OneToMany注释中使用级联。

答案 2 :(得分:1)

如hibernate文档中所示,我们可以使用cascadeType属性和@cascade注释:

@OneToMany( cascade = {CascadeType.PERSIST, CascadeType.MERGE} )
@Cascade(org.hibernate.annotations.CascadeType.REPLICATE)
public Collection<Employer> getEmployers()