您的位置:首页 > 其它

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

2018-01-04 15:41 323 查看
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 创建客户和订单,客户
4000
关联订单,保存客户? --抛异常
// ** 解决方案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-update:A保存,同时保存B
delete:删除A,同时删除B,AB都不存在
delete-orphan:孤儿删除,解除关系,同时将B删除,A存在的。
如果需要配置多项,使用逗号分隔。<set cascade="save-update,delete">
 
all : save-update 和 delete 整合
all-delete-orphan : 三个整合
 








内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: