Hibernate级联添加、级联修改

tech2024-11-16  14

主表映射配置文件

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="pojo.TblQx" table="TBL_QX" schema="SCOTT"> <id name="qxid" type="java.lang.Long"> <column name="QXID" precision="12" scale="0" /> <generator class="increment" /> </id> <property name="qx" type="java.lang.String"> <column name="QX" length="50" /> </property> <!-- cascade="delete" 级联删除 删除主表自动清空子表 cascade="all" 级联增删改 cascade="save-update" 级联添加与修改 inverse="true" 不会产生update 外键的语句 老大放弃控制权 --> <set name="tblJds" cascade="all" inverse="true" > <key> <column name="QXID" precision="12" scale="0" not-null="true" /> </key> <one-to-many class="pojo.TblJd" /> </set> </class> </hibernate-mapping>

子表映射配置文件

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <!-- Mapping file autogenerated by MyEclipse Persistence Tools --> <hibernate-mapping> <class name="pojo.TblJd" table="TBL_JD" schema="SCOTT"> <id name="jdid" type="java.lang.Long"> <column name="JDID" precision="12" scale="0" /> <generator class="increment" /> </id> <many-to-one name="tblQx" class="pojo.TblQx" fetch="select"> <column name="QXID" precision="12" scale="0" not-null="true" /> </many-to-one> <property name="jd" type="java.lang.String"> <column name="JD" length="50" /> </property> </class> </hibernate-mapping>

一、级联添加

1、普通添加(1)   子表关联主表 代码实现

// 普通添加 Session session = HibernateSessionFactory.getSession(); // 区县 TblQx qx = new TblQx(); qx.setQx("桃源县"); // 街道 TblJd jd1 = new TblJd(); jd1.setJd("红星街"); // 设置街道与区县关联 子表与主表关联 jd1.setTblQx(qx); // 先添加区县 session.save(qx); //添加街道 session.save(jd1); //提交事务 session.beginTransaction().commit(); //关闭session HibernateSessionFactory.closeSession();

产生两条sql语句

先添加区县  然后添加街道 

2、普通添加(2)   主表关联子表 代码实现

// 普通添加2 Session session = HibernateSessionFactory.getSession(); // 区县 TblQx qx = new TblQx(); qx.setQx("桃源县"); // 街道 TblJd jd1 = new TblJd(); jd1.setJd("红星街"); // 设置街道与区县关联 //jd1.setTblQx(qx); //设置区县与街道关联 主表关联子表 qx.getTblJds().add(jd1); // 先添加区县 session.save(qx); // 添加街道 session.save(jd1); // 提交事务 session.beginTransaction().commit(); // 关闭session HibernateSessionFactory.closeSession();

先去除多对一关系配置的inverse="true" 属性

产生三条sql语句  先添加区县 再添加街道(区县id为空)  最后update设置区县id 

 

3、级联添加

// 级联添加 Session session = HibernateSessionFactory.getSession(); TblQx qx = new TblQx(); qx.setQx("山南区"); // 添加 街道 TblJd jd1 = new TblJd(); jd1.setJd("和平路"); // 子表(街道表)关联主表(区县表) jd1.setTblQx(qx); TblJd jd2 = new TblJd(); jd2.setJd("八一路"); // 子表(街道表)关联主表(区县表) jd2.setTblQx(qx); TblJd jd3 = new TblJd(); // 子表(街道表)关联主表(区县表) jd3.setJd("五四大道"); jd3.setTblQx(qx); // 级联添加需要双向关联 主表(区县表) 关联 子表(街道表) qx.getTblJds().add(jd1); qx.getTblJds().add(jd2); qx.getTblJds().add(jd3); // 只添加主表(区县表) 自动级联 session.save(qx); session.beginTransaction().commit(); HibernateSessionFactory.closeSession(); <!-- cascade="delete" 级联删除 删除主表自动清空子表 cascade="all" 级联增删改 cascade="save-update" 级联添加与修改 inverse="true" 不会产生update 外键的语句 老大放弃控制权 --> <set name="tblJds" cascade="all" inverse="true" > <key> <column name="QXID" precision="12" scale="0" not-null="true" /> </key> <one-to-many class="pojo.TblJd" /> </set>

二、级联删除

删除主表 (区县表)  代码实现

// 级联删除 Session session = HibernateSessionFactory.getSession(); // 没有inverse="true" 删除主表(区县表) 会产生update语句 设置外键为空 ,建表要设置可以为 空才可以用 // cascade="delete" 不管怎么样 子表(街道表)必须删除 // cascade="delete" inverse="true" 一般一起用 inverse="true" 不会生成update语句 // 查询区县 TblQx qx = session.get(TblQx.class, 1l); // 删除区县 session.delete(qx); // 提交事务 session.beginTransaction().commit(); // 关闭session HibernateSessionFactory.closeSession(); <!-- cascade="delete" 级联删除 删除主表自动清空子表 cascade="all" 级联增删改 cascade="save-update" 级联添加与修改 inverse="true" 不会产生update 外键的语句 老大放弃控制权 --> <set name="tblJds" cascade="all" inverse="true" > <key> <column name="QXID" precision="12" scale="0" not-null="true" /> </key> <one-to-many class="pojo.TblJd" /> </set>

 

 

最新回复(0)