标签:Category 级联 读书笔记 JPA CascadeType 关联 对象 Hibernate hibernate
在JPA API中,javax.persistence.CascadeType类中定义了一些常量,分别表示特定的级联操作:
- CascadeType.PERSIST :当通过EntityManager的persist()方法来保存当前对象时,会级联保存所有关联的新建的临时对象。
- CascadeType.REMOVE :当通过EntityManager的remove()方法来删除当前持久化对象时,会级联删除所有关联的持久化对象。
- CascadeType.DETACH :当通过EntityManager的detach()方法来从持久化缓存中清除当前对象时,会级联清除所有关联的对象。
- CascadeType.MERGE :当通过EntityManager的merge()方法来融合当前对象时,会级联融合所有关联的对象。
- CascadeType.REFRESH :当通过EntityManager的refresh()方法刷新当前对象时,会级联刷新所有关联的对象。
- CascadeType.ALL 包含了以上所有的级联操作行为。
当通过注解来映射持久化类时,如果希望使用底层Hibernate的一些级联特性,那么还可以使用org.hibernate.annotations. CascadeType类的一些常量,例如:
- org.hibernate.annotations.CascadeType.LOCK:当通过底层Session的lock()方法把当前游离对象加入到持久化缓存中时,会把所有关联的游离对象也加入到持久化缓存中。
- org.hibernate.annotations.CascadeType.REPLICATE:当通过底层Session的replicate()方法复制当前对象时,会级联复制所有关联的对象。
- org.hibernate.annotations.CascadeType.SAVE_UPDATE:当通过底层Session的save()、update()及saveOrUpdate()方法来保存或更新当前对象时,会级联保存所有关联的新建的临时对象,并且级联更新所有关联的游离对象。
例如以下@OneToMany注解的cascade属性的取值为“org.hibernate.annotations.CascadeType.SAVE_UPDATE”:
@OneToMany(mappedBy="parentCategory",
targetEntity=Category.class)
@org.hibernate.annotations.Cascade(
org.hibernate.annotations.CascadeType.SAVE_UPDATE)
private Set<Category> childCategories = new HashSet<Category>(0);
Category类是具有自身双向关联的类,它的childCategories属性以及parentCategory属性,进行了如下映射:
@OneToMany(mappedBy="parentCategory",
targetEntity=Category.class,
cascade=CascadeType.ALL,
fetch=FetchType.EAGER)
private Set<Category> childCategories = new HashSet<Category>(0); //子商品类别
@ManyToOne(targetEntity =Category.class,
cascade=CascadeType.ALL,
fetch=FetchType.EAGER)
@JoinColumn(name="CATEGORY_ID")
private Category parentCategory; //父商品类别
对于以上两个属性,它们的级联操作都是CascadeType.ALL,这意味着对当前的Category对象进行特定操作时,会对所关联的父类别Category对象,以及所关联的所有子类别Category对象进行同样的级联操作。
另外,为了保证从数据库中加载一个Category对象时,会立即加载所关联的父类别和子类别Category对象,采用了立即检索策略:FetchType.EAGER。
标签:Category,级联,读书笔记,JPA,CascadeType,关联,对象,Hibernate,hibernate 来源: https://blog.51cto.com/sunweiqin/2752663
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。