A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

【郑州校区】Hibernate关联映射-一对多
我们以客户(Customer)与订单(Order)为例
1.1. 实体类创建
订单
客户
1.2. Hbm映射文件编写Order.hbm.xml
Customer.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口出

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马