hibernate 的多表设计 关联关系映射 级联操作

1.1表之间关系存在3种:一对多、多对多、一对一

1.1 一对多操作

   一个客户有多个订单(即订单的外键和客户主键相关联)
直接代码:
@Test
public void  TestDemo1(){
    Session session=   HibernateUtils.openSession();
    Transaction transaction=  session.beginTransaction();
    Customer customer=new Customer();
    customer.setCname("ssml003");

    Order order = new Order();
    order.setPrice("998003");
   customer.getOrderSet().add(order);
   order.setCustomer(customer);
    session.save(customer);
    session.save(order);
    transaction.commit();
    session.close();
}
执行结果入下:

1.1 级联操作(读、理解)

客户的xml中  cascade="save-update"  

1.1.1 save-update  级联保存或更新

// 32 创建客户和订单,客户关联订单,保存客户? --抛异常

// ** 解决方案2:级联操作--级联保存或更新

// ** Customer.hbm.xml <set cascade="save-update">

// ** 在保存客户的同时,一并保存订单

代码:
//级联
 @Test
 public void  TestDemo2(){
     Session session=   HibernateUtils.openSession();
     Transaction transaction=  session.beginTransaction();
     Customer customer=new Customer();
     customer.setCname("ssml004");

     Order order = new Order();
     order.setPrice("998004");
     customer.getOrderSet().add(order);
     order.setCustomer(customer);
     session.save(customer); //未保存订单

     transaction.commit();
     session.close();
 }
结果:保存了俩个

1.1.1 delete 级联删除

代码:
//级联删除
@Test
public void  TestDemo3(){
    Session session=   HibernateUtils.openSession();
    Transaction transaction=  session.beginTransaction();
    Customer customer= (Customer)session.get(Customer.class,7);
  session.delete(customer);

    transaction.commit();
    session.close();
}
结果:


1.1.1 孤儿删除

总结:

主表不能删除,从表已经引用(关联)的数据

从表不能添加,主表不存在的数据。


1.1.1 总结

save-updateA保存,同时保存B

delete:删除A,同时删除BAB都不存在

delete-orphan:孤儿删除,解除关系,同时将B删除,A存在的。

如果需要配置多项,使用逗号分隔。<set cascade="save-update,delete">

 

all : save-update delete 整合

all-delete-orphan : 三个整合

 














  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值