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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 htb52110 于 2018-1-15 19:51 编辑

9、Hibernate关系映射【一对多】
以客户(Customer)与订单(Order)为例
9.1、实体类创建
订单
客户:
9.2、hbm映射文件的编写
Order.hbm.xml
Customer.hbm.xml
9.3、测试保存

9.4、测试单项保存
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: cn.itheima.oneToMany.Customer
…………..
这个异常代表提一个持久化对象关联了一个瞬时对象。
我们可以使用级联操作来解决上述的问题.
我们现在要做的是保存订单时保存客户,需要在订单的hbm配置文件中修改
设置cascade=save-update 那么在保存订单时就可以自动将客户保存。
如果我们要完成保存客户时,保存订单
9.5、双向关联维护
我们在开发中要配置双向关联配置。---------可以通过任意一方来操作对方
在操作代码,尽量来要进行单向关联。------可以尽量资源浪费。
在双向关联中,会存在多余的update语句。
我们可以使用inverse属性来设置,双向关联时由哪一方来维护表与表之间的关系。
Inverse它的值如果为true代表,由对方来维护外键。
Inverse它的值如果为false代表,由本方来维护外键。
关于inverse的取值:
         外键在哪一个表中,我们就让哪一方来维护外键。
9.6、对象导航
9.7、级联删除
我们在删除客户时,也要删除订单,如果没有做级联,那么这个操作是不允许。
为了维护数据完整性
想要完成操作:我们可以在客户中添加cascade=”delete”;
delete-orphan用法

9.8、cascade总结
使用cascade可以完成级联操作
它可常用取值:
         none这是一个默认值
save-update,当我们配置它时,底层使用save updatesave-update完成操作,级联保存临时对象,如果是游离对象,会执行update.
delete 级联删除
delete-ophan 删除与当前对象解除关系的对象。
all 它包含了save-update  delete操作
all-delete-orphan 它包信了delete-orphanall操作
笔试题:cascadeinverse有什么区别?
         cascade它是完成级联操作
         Inverse它只有在双向关联情况下有作用,它来指定由哪一方维护外键。
10、Hibernate的注解开发
hibernate中我们使用注解,可以帮助我们简化hbm文件配置。
10.1、PO类注解
@Entity 声明一个实体
@Table来描述类与表对应
@Id来声明一个主键
@GenerateValue 用它来声明一个主键生成策略
默认情况下相当于native
可以选择的主键生成策略 AUTO IDENTITY SEQUENCE
@Column来定义列
注意:对于PO类中所有属性,如果你不写注解,默认情况下也会在表中生成对应的列。
列的名称就是属性的名称
@Temporal来声明日期类型
可以选择
TemporalType.DATA   只有年月日
TemporalType.TIME   只有小时分钟秒
TemporalType.TIMESTAMP 有年月日小时分钟秒
我们最终需要在hibernate.cfg.xml文件中将我们类中的注解配置引用生效
主键生成策略使用UUID类型
设定类的属性不在表中映射
注意:
关于属性配置的注解,也可以在其对应的getXxx方法去使用

10.2、 一对多(多对一)
@OneToMany
@ManyToOne
CustomerOrder为例
Customer
Order
示例:保存客户时,保存订单
对于这个示例我们需要在Customer中配置cascade操作,save-update
第一种方式,可以使用JPA提供的注解
第二种方式:可以使用hibernate提供的注解
扩展:关于hibernate注解@Cascade中的DELETE_ORPHAN过时
使用下面方案来替换过时方案
11、Hibernate关联映射-多对多
我们使用注解完成多对多配置.
描述学生与老师.
使用@ManyToMany来配置多对多,只需要在一端配置中间表,另一端使用mappedBy表示放置外键维护权
11.1、PO类
Teacher类中
Student类中

11.2、级联保存操作测试
将外键的维护权利由Student来维护,保存学生时,教师将也级联保存。
Student类中配置了级联
11.3、级联删除操作测试
12、Hibernate关联映射-一对一
以人与身份证号为例
一对一操作有两种映射方式:
a、在任意一方添加外键
b、主键映射
12.1、外键映射
创建实体
User
上述配置,t_user表放弃对外键的维护权利
                IDCard
joinColumn指定外键列名称,当前配置外键是在t_idcard表中

测试代码
12.2、主键映射【了解即可】
HusbandWife为例
Wife的主键生成策略是identity
@PrimaryKeyJoinColumn 说明husbandwife是使用主键映射
Husband的主键我们设置成参考wife的主键方式
                测试操作
您需要登录后才可以回帖 登录 | 加入黑马