首页 > 代码库 > Hibernate 一对一、一对多、多对多注解cascade属性的总结

Hibernate 一对一、一对多、多对多注解cascade属性的总结

作用:是否级联被注解字段里面的对象。可选值:javax.persistence.CascadeType.PERSIST, MERGE, REMOVE, REFRESH, DETACH, ALL。可选其中的一个或多个,选一个时,花括号可用可不用。

 

PERSIST 级联session的persist操作。假设Student类和teachers字段的@ManyToMany注解上配置有cascade = {CascadeType.PERSIST},那么,当stu1对象set了一个teachers集合(这个集合里面的对象都是瞬态的),持久化这个stu1d对象时,这个集合里面的所有瞬态对象都会被级联持久化到数据库。
MERGE 级联merge操作。道理同上。
REMOVE 级联remove操作。道理同上。
REFRESH 级联refresh操作。道理同上。
DETACH 级联evict操作。道理同上。
ALL 级联以上所有操作。

 

或者:使用Hibernate自身的CascadeType.可选值:

ALL
Includes all types listed here.
DELETE
Corresponds to the Hibernate native DELETE action.
DELETE_ORPHAN
Deprecated. 
use @OneToOne(orphanRemoval=true) or @OneToMany(orphanRemoval=true)
DETACH
Corresponds to CascadeType.DETACH.
EVICT
Deprecated. 
use CascadeType.DETACH
LOCK
Corresponds to the Hibernate native LOCK action.
MERGE
Corresponds to CascadeType.MERGE.
PERSIST
Corresponds to CascadeType.PERSIST.
REFRESH
Corresponds to CascadeType.REFRESH.
REMOVE
Corresponds to CascadeType.REMOVE.
REPLICATE
Corresponds to the Hibernate native REPLICATE action.
SAVE_UPDATE
Corresponds to the Hibernate native SAVE_UPDATE (direct reattachment) action.

可见,除REPLICATE和SAVE_UPDATE是JPA.CascadeType里面没有的,其他的都一样。其中,DELETE对应JPA.CascadeType的REMOVE,DELETE_ORPHAN是不赞成的,DETACH和EVICT对应JPA.CascadeType的DETACH,作用是org.hibernate.Session的evict方法的作用。

REPLICATE:
SAVE_UPDATE:

 

JPA.CascadeType的所有枚举值,都对应了org.hibernate.Session的方法(DETACH对应evict)。关于Session的方法,参考另一边博客:http://www.cnblogs.com/565261641-fzh/p/6658747.html

 

Hibernate 一对一、一对多、多对多注解cascade属性的总结