以汽车对象为例
创建一个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语句如下
<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>
很符合面向对象的思维方式:
basicCar basiccar =new basicCar ();
他的优点就是维护比较简单,建表比较麻烦。
创建一个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';
中格式如下
<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 basiccar =new basicCar ();
basiccar.setcarType("lorry");
优点就是建表的时候简单,但是后期数据库维护比较困难。
他的优点就是维护比较简单,建表比较麻烦。