Hibernate学习笔记:级联删除

Posted 睡猪遇上狼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hibernate学习笔记:级联删除相关的知识,希望对你有一定的参考价值。

一对多的关系映射

在一的一方配置文件中将会配置set节点信息:

*.hbm.xml配置文件中set节点的属性:

         Lazy:默认是true 即使用延迟加载,false表示即时加载;

         Order-by:一的一方set集合内多的一方实体集合的排序方式 默认是主键排序 但可以更改;

         Cascade:是否使用级联操作;配置方法:cascade的值有如下几个;

      all: 所有情况下均进行关联操作,即save-update和delete。

      none: 所有情况下均不进行关联操作。这是默认值。 

      save-update: 在执行save/update/saveOrUpdate时进行关联操作。 

      delete: 在执行delete 时进行关联操作。

      all-delete-orphan: 当一个节点在对象图中成为孤儿节点时,删除该节点

         Inverse:反转。True表示由对方负责控制,false表示由自己控制。

 

级联删除:(在一的一方的配置文件中set节点进行配置)

  cascade的值使用all表示对所有操作都级联;

  把set节点的属性inverse的值改为true:

  就可以实现级联删除了,即删除一的一方后,在多的一方中引用到一的一方的主键的全部记录将会被删除

 

一对多中的‘一’

  vo

package org.sunny.shop.vo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Set;

public class Category {

    private int cid;
    private String cname;
    private Date dateinsert ;
    private Date dateupdate ;
  //利用集合来与多的一方关联
    private Set<Category2th> category2thSet;

    /*
   *
   *剩下的为setter、getter方法
   *
   */

}

  Category.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="org.sunny.shop.vo.Category" table="category">
        <id name="cid" column="cid">
            <generator class="identity" />
        </id>
        <property name="cname" />
        <property name="dateinsert" />
        <property name="dateupdate" />
        
        <!-- 配置二级分类的集合 -->
        <set order-by="csid" name="category2thSet" lazy="false" cascade="all" inverse="true">
            <key column="cid"/>
            <one-to-many class="org.sunny.shop.vo.Category2th"/>
        </set>
    </class>
</hibernate-mapping>

一对多中的‘多’

  vo

package org.sunny.shop.vo;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Set;

public class Category2th { private int csid; private String csname; // 分类添加时间 private Date dateinsert; // 分类更新时间 private Date dateupdate; private Category category;   //用vo类与一对多中的‘一’关联 private Set<Product> productSet; /*    *    *剩下的是setter、getter方法    *    */ }

 

  Category2th.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="org.sunny.shop.vo.Category2th" table="categorysecond">
        <id name="csid" column="csid">
            <generator class="identity" />
        </id>
        <property name="csname"/>
        <property name="dateinsert" />
        <property name="dateupdate" />
        
        <!-- 二级分类与一级分类的关联 -->
        <many-to-one name="category" lazy="false" class="org.sunny.shop.vo.Category">
            <column name="cid"></column>
        </many-to-one>
    </class>
</hibernate-mapping>

 

以上是关于Hibernate学习笔记:级联删除的主要内容,如果未能解决你的问题,请参考以下文章

关联映射 ---- Hibernate之多对多关系

hibernate多对多双向关系映射的级联配置

Hibernate学习笔记 --- 创建基于中间关联表的多对多映射关系

Hibernate学习笔记:级联删除

Hibernate学习8—Hibernate 映射关系(多对多)

关联映射级联操作关系维护 ---- Hibernate之一对多|多对一关系