hibernate的继承关系映射(一)
2014-05-11 18:20
344 查看
以汽车对象为例
创建一个basiccar为父类
hibernate的继承关系映射
是为了描述数据库中数据表与对象之间的映射关系
具体指
对象名-------表名
成员变量1--------列名1
成员变量2--------列名2
............
这种映射用于对象的操作(包括增删查改等行为)与SQL对数据表操作之间的转化
说明了关系映射的概念后,下面看一下hibernate怎么处理上述事例的映射的
首先对着上述对象的继承关系(A <------B,A<-------C),我们有2中创表方法
第一种就是创建一种数据库表basicCar,第二种就是创建3个数据库表(basicCar ,Lorry,saloonCar)
若只是创建一张表
如下
其中其中carType指明了子类的类型····
若指明为Lorry
则表中loadPerson为空
使用HQL查询
session.find("from Lorry");
,则被Hibernate翻译成SQL语句如下
SELECT * FROM basiccar WHERE carType = 'Lorry';
其中其中的映射表basiccar.hbm.xml
中格式如下
<hibernate-mapping>
<class name =" basiccar类名" table=“表名” lazy=“false” >
<id......>
.........
</id>
<!-- 父类的属性 必须在basiccar表中-->
<property > </property >
<property > </property >
.......
<!-- discriminator 元素用于指明carType列名是用来区分子类的类型的,类似 [下拉菜单控件] 一样的-->
<discriminator column="carType" type="string"> </discriminator>
<subclass name="子类Lorry的名" discriminator-value="lorry" >
<!-- 子类自己拥有的属性 必须在basiccar表中-->
<property > </property >
<property > </property >
.......
</subclass>
<subclass name="子类salooncar的名" discriminator-value="salooncar" >
<!-- 子类自己拥有的属性 必须在basiccar表中-->
<property > </property >
<property > </property >
<property > </property >
.......
</subclass>
</class>
</hibernate-mapping>
从上面的basiccar.hbm.xml配置文件我们可以清晰的看到,这只是用<discriminator>做一下声明谁是变量名,然后用<subclass ... discriminator-value >标签把表中的<property> 分给对于的子类而已
很符合面向对象的思维方式:
basicCar basiccar =new basicCar ();
basiccar.setcarType("lorry");
以上是只用一个表来装两个子类的数据的方法。
优点就是建表的时候简单,但是后期数据库维护比较困难。
hibernate的继承关系映射(二)要介绍另一种,继承关系映射方式
他的优点就是维护比较简单,建表比较麻烦。
创建一个basiccar为父类
class basicCar { int name; int id; } //创建子类,货车lorry class lorry extends basicCar { //......省略构造器 float loadWeight; } //创建子类,客车 class saLoonCar extends baisccar { //......省略构造器 int loadpersons; }
hibernate的继承关系映射
是为了描述数据库中数据表与对象之间的映射关系
具体指
对象名-------表名
成员变量1--------列名1
成员变量2--------列名2
............
这种映射用于对象的操作(包括增删查改等行为)与SQL对数据表操作之间的转化
说明了关系映射的概念后,下面看一下hibernate怎么处理上述事例的映射的
首先对着上述对象的继承关系(A <------B,A<-------C),我们有2中创表方法
第一种就是创建一种数据库表basicCar,第二种就是创建3个数据库表(basicCar ,Lorry,saloonCar)
若只是创建一张表
如下
其中其中carType指明了子类的类型····
若指明为Lorry
则表中loadPerson为空
使用HQL查询
session.find("from Lorry");
,则被Hibernate翻译成SQL语句如下
SELECT * FROM basiccar WHERE carType = 'Lorry';
其中其中的映射表basiccar.hbm.xml
中格式如下
<hibernate-mapping>
<class name =" basiccar类名" table=“表名” lazy=“false” >
<id......>
.........
</id>
<!-- 父类的属性 必须在basiccar表中-->
<property > </property >
<property > </property >
.......
<!-- discriminator 元素用于指明carType列名是用来区分子类的类型的,类似 [下拉菜单控件] 一样的-->
<discriminator column="carType" type="string"> </discriminator>
<subclass name="子类Lorry的名" discriminator-value="lorry" >
<!-- 子类自己拥有的属性 必须在basiccar表中-->
<property > </property >
<property > </property >
.......
</subclass>
<subclass name="子类salooncar的名" discriminator-value="salooncar" >
<!-- 子类自己拥有的属性 必须在basiccar表中-->
<property > </property >
<property > </property >
<property > </property >
.......
</subclass>
</class>
</hibernate-mapping>
从上面的basiccar.hbm.xml配置文件我们可以清晰的看到,这只是用<discriminator>做一下声明谁是变量名,然后用<subclass ... discriminator-value >标签把表中的<property> 分给对于的子类而已
很符合面向对象的思维方式:
basicCar basiccar =new basicCar ();
basiccar.setcarType("lorry");
以上是只用一个表来装两个子类的数据的方法。
优点就是建表的时候简单,但是后期数据库维护比较困难。
hibernate的继承关系映射(二)要介绍另一种,继承关系映射方式
他的优点就是维护比较简单,建表比较麻烦。
相关文章推荐
- 精通Hibernate之映射继承关系七(图)
- Hibernate笔记=>继承关系的映射
- Hibernate学习---第八节:继承关系的映射配置
- hibernate继承关系映射和java反射机制的运用
- hibernate3.3.2学习笔记---映射继承的关系
- Hibernate之jpa实体映射的三种继承关系
- 【HIbernate框架学习】:Hibernate对象继承关系映射(二)
- hibernate映射关系——继承映射
- 【SSH 基础】Hibernate继承关系映射
- Hibernate对象关系映射----继承映射
- Hibernate 继承映射关系 —— 类继承树映射成一张表
- hibernate映射继承关系一
- 【Hibernate框架开发之七】Hibernate使用Annotation中各种关系映射的CRUD(增删改查)&&集合映射&&继承映射
- 精通Hibernate之映射继承关系八
- 精通Hibernate之映射继承关系(四)
- 【Hibernate框架开发之七】Annotation各种关系CRUD增删改查&集合映射&继承映射
- hibernate继承关系映射和java反射机制的运用
- J2EE系列之Hibernate4学习笔记(十二)--Hibernate继承关系映射(每个类对应一个表)
- Hibernate之jpa实体映射的三种继承关系
- Hibernate 继承关系映射——共享一个数据库表