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>