#关键点都在数据库中的外键上面,请好好理解下面这二句SQL和一对多及多对一的关系 #select * from Orders where cid=? //这条SQL返回客户对应的0-n个订单 #select * from Customers where customerId=? //这条SQL返回订单对应的1个客户 #通过这二条SQL不难看出,外键在这里有二个用途:查找客户的订单,查找订单对应的客户
2.3 建立订单到客户的多对一关联关系
2.4 注意:在Hibernate当中定义实体对象的集合属性时,只能使用接口而不能使用类
小结: 多方的CRUD与没有建立关联关系之前的操作一致 一方的CRUD与没有建立关联关系之前的操作有变化 D:删除一方之前先删除多方 C:级联操作 R:代码控制多方
案例:菜单对象的一对多双向自关联 <!-- select * from t_menu where menu_id = ? --> <many-to-one name="superMenu" class="entity.Menu" column="super_menu_id"></many-to-one> <!-- select * from t_menu where super_menu_id = ? --> <set name="childMenus" inverse="true" lazy="true" outer-join="false" cascade="save-update"> <key column="super_menu_id"></key> <one-to-many class="entity.Menu" /> </set> 如何将多方映射成一个有序的集合 <!-- bag元素可以映射List集合,order-by属性还可以用来排序(asc升序|desc降序),其它和set元素的使用一样 --> <bag name="childMenus" inverse="true" lazy="true" outer-join="false" cascade="save-update" order-by="position asc"> <key column="super_menu_id"></key> <one-to-many class="entity.Menu" /> </bag>核心 订单表、订单项
级联新增 外键处理的三种方式 1、删除从表对应的实体类中的外键属性 2、在配置的xml中外键属性上添加 insert=false,update=false的设置。 3、在配置的xml中的manyToOne标签中添加insert=false,update=false的设置。 级联新增 casecade=save-update 介绍
级联查询 配置文件介绍以及后台sql的形成过程 级联查询时的问题 Lazy=true介绍 查单个时存在问题 Lazy=false介绍 查所有时存在问题 解决方案:通过字段控制,强制加载。Hibernate.initialize()
普通删除 Order Add 讲外键的处理 Get/list order.getOrderItems.size讲懒加载的处理,sql形成过程 Del 将关系的处理中的删除