hibernate 的多表设计 关联关系映射 级联操作
2018-01-04 15:41
323 查看
1.1表之间关系存在3种:一对多、多对多、一对一
直接代码:
4000
关联订单,保存客户? --抛异常
// ** 解决方案2:级联操作--级联保存或更新
// ** Customer.hbm.xml <set cascade="save-update">
// ** 在保存客户的同时,一并保存订单
代码:
代码:
主表不能删除,从表已经引用(关联)的数据
从表不能添加,主表不存在的数据。
delete:删除A,同时删除B,AB都不存在
delete-orphan:孤儿删除,解除关系,同时将B删除,A存在的。
如果需要配置多项,使用逗号分隔。<set cascade="save-update,delete">
all : save-update 和 delete 整合
all-delete-orphan : 三个整合
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保存,同时保存Bdelete:删除A,同时删除B,AB都不存在
delete-orphan:孤儿删除,解除关系,同时将B删除,A存在的。
如果需要配置多项,使用逗号分隔。<set cascade="save-update,delete">
all : save-update 和 delete 整合
all-delete-orphan : 三个整合
相关文章推荐
- hibernate_级联操作、关联关系映射
- 12-hibernate关联关系的级联操作
- Hibernate学习之级联操作4——多对多关联关系
- Hibernate 级联操作,映射文件中的默认的Lazy属性导致的异常
- Hibernate使用中间表完成单向多对多关联关系的配置和级联操作示例
- 【SSH三大框架】Hibernate基础第九篇:cascade关联关系的级联操作
- Hibernate学习之级联操作3——一对一关联关系
- JAVAWEB开发之Hibernate详解(二)——Hibernate的持久化类状态与转换、以及一级缓存详解、关联关系的映射(一对多、多对多、级联)
- Hibernate关联关系 --- 集合映射中的级联保存和是否维护表的关联关系
- 【SSH三大框架】Hibernate基础第九篇:cascade关联关系的级联操作
- Hibernate学习之级联操作1——一对多关联关系
- 一对多单向双向映射关联关系之映射文件与级联操作
- 【SSH三大框架】Hibernate基础第九篇:cascade关联关系的级联操作
- Hibernate学习之级联操作2——一对多双向自身关联关系
- hibernate的级联操作异常
- Hibernate one to many 关联关系映射
- Hibernate学习---关联关系映射
- Hibernate的学习之路二十七(多对多操作级联)
- Hibernate关联关系映射---1对多
- hibernate 映射实体类并操作数据库!