【郑州校区】Hibernate关联映射-一对多 我们以客户(Customer)与订单(Order)为例 1.1. 实体类创建 订单客户 1.2. Hbm映射文件编写Order.hbm.xmlCustomer.hbm.xml 1.3. 测试保存上面操作是一种双向关联 问题:我们可不可以只保存订单或只保存客户完成保存操作? 1.4. 测试单向关联保存org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: cn.itheima.oneToMany.Customer ………….. 这个异常代表提一个持久化对象关联了一个瞬时对象。 我们可以使用级联操作来解决上述的问题. 我们现在要做的是保存订单时保存客户,需要在订单的hbm配置文件中修改 设置cascade=save-update 那么在保存订单时就可以自动将客户保存。 如果我们要完成保存客户时,保存订单 1.5. 双向关联维护我们在开发中要配置双向关联配置。---------可以通过任意一方来操作对方 在操作代码,尽量来要进行单向关联。------可以尽量资源浪费。 在双向关联中,会存在多余的update语句。 我们可以使用inverse属性来设置,双向关联时由哪一方来维护表与表之间的关系。 Inverse它的值如果为true代表,由对方来维护外键。 Inverse它的值如果为false代表,由本方来维护外键。 关于inverse的取值: 外键在哪一个表中,我们就让哪一方来维护外键。 1.6. 对象导航1.7. 级联删除我们在删除客户时,也要删除订单,如果没有做级联,那么这个操作是不允许。 为了维护数据完整性
想要完成操作:我们可以在客户中添加cascade=”delete”; delete-orphan用法 1.8. cascade总结使用cascade可以完成级联操作 它可常用取值: none这是一个默认值 save-update,当我们配置它时,底层使用save update或save-update完成操作,级联保存临时对象,如果是游离对象,会执行update. delete 级联删除 delete-ophan 删除与当前对象解除关系的对象。 all 它包含了save-update delete操作 all-delete-orphan 它包信了delete-orphan与all操作 笔试题:cascade与inverse有什么区别? cascade它是完成级联操作 Inverse它只有在双向关联情况下有作用,它来指定由哪一方维护外键。 传智播客·黑马程序员郑州校区地址 河南省郑州市 高新区长椿路11号大学科技园(西区)东门8号楼三层 联系电话 0371-56061160/61/62 来校路线 地铁一号线梧桐街站A口出
|