Hibernate征途(五)之继承映射和组件映射
之所以把这两种映射放到一起说,是因为二者都是以复用为目的,减少了代码和配置量,这是相同点;二者之间的不同点类似继承和实现的区别:继承的类是一个事物的抽象,而实现的接口仅仅是功能的抽象。
继承映射
如上面所说,以下面类图为例:
它的映射方式有三种,它们的类和属性相同,只是映射文件不同,当然也导致映射的数据结构也不同,先一下以上三个类,再根据映射文件的不同说明每种映射方式。
Animal
很明显,这种方式是将Pig和Bird冗余到一张表,以类型字段区分开来,来看一下它的映射文件:
再来看一下映射文件:
再来看一下映射文件:
Contact类在此的作用就是组件类,需要时引用即可。来看一下简写的类:
Contact
但从表结构上来看,和上面的“联合子类”的继承映射类似。再来看一下User的映射文件(Employee类似):
<hibernate-mapping><class name="com.tgb.hibernate.User" table="t_User"><id name="id"><generator class="native"/></id><property name="name"/><component name="userContact"><property name="email"/><property name="address"/><property name="zipcode"/><property name="contactTel"/></component></class></hibernate-mapping>可以看到Contact此处仅仅是作为组件使用,它仅仅是一个值,而非实体,所以不用Contact的映射文件。它与继承类似,都是为了复用;相比继承映射而言,不同点在于它将功能抽象出来,它的粒度更细,提供了更广的复用范围,与接口类似。
总结到此为止大致给大家介绍了一下继承映射和组件映射,希望通过对比的方式,将二者的区别和类似展现出来,下篇博客会介绍一下复合主键映射和集合映射。