@cascade(cascadeType.Delete)和cascade = cascadeType.Delete之间的区别

时间:2016-01-05 05:35:25

标签: java hibernate

我是hibernate的新手。在我正在使用它的项目中使用了@Cascade(CascadeType.DELETE) @ManyToOne 实体类中的注释。但我找到了另一个注释 @ManyToOne(cascade = CascadeType.DELETE,fetch = FetchType.LAZY)。这两个注释是否有任何区别。如有差异请解释。

1 个答案:

答案 0 :(得分:0)

javadoc说明了一切。 Cascade javadoc说:

  

在关联上应用级联策略。用于应用特定于Hibernate的级联。对于JPA级联,更喜欢在OneToOne,OneToMany等上使用CascadeType .Hibernate会将两组级联合并在一起。

(强调我的)

CascadeType.DELETE的javadoc说;

  

对应于Hibernate本机DELETE操作。

所以,如果你坚持使用标准的JPA API,或者是标准JPA方法的Session方法(persist(),merge(),remove()等),那么你应该永远不必使用Hibernate - 专有的级联注释。

但是如果您使用Hibernate专有的方法,如save(),saveOrUpdate(),update(),delete(),并且您希望级联应用于这些方法,那么您将需要使用Cascade,因为没有使用JPA标准注释来指定JPA中不存在的方法的行为(除了cascade = ALL,它涵盖所有操作,甚至是特定于Hibernate的操作)