首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

经验4-hibernate入门4 级联之双向一对多与多对一

2012-12-26 
心得4-hibernate入门4 级联之双向一对多与多对一继上篇博客之后的补充:双向的一对多与多对一级联关系操作。

心得4-hibernate入门4 级联之双向一对多与多对一

    继上篇博客之后的补充:双向的一对多与多对一级联关系操作。具体请看下面案例分析:   配置文件没有什么变化,就是上一篇博客中的多对一与一对多的集合一块,不会的留言,这里不再细说了。主要测试类,下面类测试级联更新,级联删除的多种情况,级联插入,级联查找的不同情况,并附有相关注释介绍相关操作
package com.hbsi.orders_o2mboth;import java.util.Set;import org.hibernate.Session;import org.junit.Test;import com.hbsi.utils.HibernateUtil;public class One2ManyBoth {Session session = null;@Testpublic void add(){try{session = HibernateUtil.getSession();session.beginTransaction();Customer cus = new Customer("红军1","母",85);Orders ord1 = new Orders("餐巾纸1",3.5);Orders ord2 = new Orders("鼠标垫1",10.3);ord1.setCus(cus);ord2.setCus(cus);/*Set<Orders> ords = new HashSet<Orders>();ords.add(ord1);ords.add(ord2);session.save(cus);*/session.save(ord1);session.save(ord2);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();}finally{//HibernateUtil.close();}}//修改订单所有者@Testpublic void change(){try{session = HibernateUtil.getSession();session.beginTransaction();//获取订单名Orders order  = (Orders) session.get(Orders.class, 15);//获取客户名Customer custmer = (Customer)session.get(Customer.class,6);//把获取到订单放到获取到的客户上,达到修改订单所有者的目的order.setCus(custmer);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.close();}}//删除某一订单,单多方xxx.hbm.xml中都没有设置级联删除@Testpublic void delete1(){try{session = HibernateUtil.getSession();session.beginTransaction();//获取订单名      Orders order  = (Orders) session.get(Orders.class, 23);session.delete(order);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.close();}}//删除某一订单和与之级联的客户,并把剩下级联订单的外键设置为空,Orders.hbm.xml中设置级联删除,Customer.hbm.xml中不设置级联操作也不设置放弃操作,即inverse=“true”@Testpublic void delete2(){try{session = HibernateUtil.getSession();session.beginTransaction();//获取订单名Orders order  = (Orders) session.get(Orders.class, 25);session.delete(order);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.close();}}//删除某一客户,但是其下的订单可以不删除,但是会自动更新为空。Customer.hbm.xml下没有设置级联删除,如果Customer.hbm.xml中设置了放弃操作会报错@Testpublic void delete3(){try{session = HibernateUtil.getSession();session.beginTransaction();//获取订单名Customer cus  = (Customer) session.get(Customer.class, 14);session.delete(cus);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.close();}}//删除某一客户,级联删除,连带着其下的所有订单全部删除.Customer.hbm.xml下设置级联删除,如果Customer.hbm.xml中设置了放弃操作会报错@Testpublic void delete4(){try{session = HibernateUtil.getSession();session.beginTransaction();//获取订单名Customer cus  = (Customer) session.get(Customer.class, 15);session.delete(cus);session.getTransaction().commit();}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.close();}}//查询某一客户的所有订单号@Testpublic void find1(){try{session = HibernateUtil.getSession();Customer cus = (Customer) session.get(Customer.class, 6);Set<Orders> ords = cus.getOrd();for(Orders ord : ords){System.out.println(ord.getOname());}}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.close();}}//查询某一订单的所属客户@Testpublic void find2(){try{session = HibernateUtil.getSession();Orders ord = (Orders) session.get(Orders.class,13);System.out.println(ord.getCus().getCname());}catch(Exception e){e.printStackTrace();}finally{HibernateUtil.close();}}}

热点排行