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