fxb248
留言簿
给我留言
查看公开留言
查看私人留言
随笔分类
J2EE架构
(rss)
java基础
(rss)
ORM_Hibernate
(rss)
Spring
(rss)
文章分类
J2EE架构
(rss)
JAVA基础(1)
(rss)
ORM_Hibernate(3)
(rss)
Spring
(rss)
文章档案
2011年10月 (4)
搜索
最新评论
Powered by:
博客园
模板提供:
沪江博客
BlogJava
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
Hibernate之继承映射
1.每个子类对应一张数据表
hbm和平常的没有什么区别,一般是默认的隐式多态模式(polymorphism="implicit")。
优点:实现简单。
缺点:
a.不太支持多态关联。假如有一个表和这个基类有外键关系,则不容易实现。
b.多态查询也有问题,针对基类的查询需要几个select语句把所有子类都查一遍。
c.由于都复制了主表字段,如果基类发生了变动,所有表都需要变动。
2.每个类一张表
范例hbm文件如下:
<?
xml version="1.0"
?>
<!
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!--
Generated 2011-10-17 17:49:02 by Hibernate Tools 3.4.0.CR1
-->
<
hibernate-mapping
>
<
class
name
="com.Martin.M.TItem"
table
="T_Item"
>
<
id
name
="id"
type
="java.lang.Integer"
>
<
column
name
="ID"
/>
<
generator
class
="increment"
/>
</
id
>
<
property
name
="name"
type
="java.lang.String"
column
="name"
/>
<
property
name
="manufacturer"
type
="java.lang.String"
column
="manufacturer"
/>
<
joined-subclass
table
="T_Book"
name
="com.Martin.M.TBook"
>
<
key
column
="id"
/>
<
property
name
="pageCount"
type
="java.lang.Integer"
column
="pageCount"
/>
</
joined-subclass
>
<
joined-subclass
table
="T_DVD"
name
="com.Martin.M.TDVD"
>
<
key
column
="id"
/>
<
property
name
="reginCode"
type
="java.lang.String"
column
="reginCode"
/>
</
joined-subclass
>
</
class
>
</
hibernate-mapping
>
不需要给子类编写hbm文件。joined-subclass中可以进行嵌套。
优点:数据逻辑划分清晰。
缺点:多表操作带来的性能损耗相当可观。
3.整个类层次结构映射到一张表
通过冗余字段的方式表达同数据类型,也就是一张表包含所有子类对象。
hbm范例文件如下:
<?
xml version="1.0"
?>
<!
DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!--
Generated 2011-10-17 17:49:02 by Hibernate Tools 3.4.0.CR1
-->
<
hibernate-mapping
>
<
class
name
="com.Martin.M.TItem"
table
="T_Item"
>
<
id
name
="id"
type
="java.lang.Integer"
>
<
column
name
="ID"
/>
<
generator
class
="increment"
/>
</
id
>
<
discriminator
column
="category"
type
="java.lang.String"
/>
<
property
name
="name"
type
="java.lang.String"
column
="name"
/>
<
property
name
="manufacturer"
type
="java.lang.String"
column
="manufacturer"
/>
<
subclass
name
="com.Martin.M.TBook"
discriminator
="1"
>
<
property
name
="pageCount"
type
="java.lang.String"
column
="pageCount"
/>
</
subclass
>
<
subclass
name
="com.Martin.M.TDVD"
discriminator
="2"
>
<
property
name
="reginCode"
type
="java.lang.String"
column
="reginCode"
/>
</
subclass
>
</
class
>
</
hibernate-mapping
>
它通过定义discriminator元素来确定类型字段,然后在各子类型中确定相应的类型字段值。读取时,会根据这个类型字段值映射到相应的类型。
优点:性能和简单性方面都胜出一筹。
缺点:子类的字段都要设置为可为空,从数据库完整性约束来说,没有NOT NULL约束是一个严重的问题。
发表于 2011-10-24 22:16
轮回小圣
阅读(302)
评论(0)
编辑
收藏
所属分类:
ORM_Hibernate
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Hibernate之继承映射
Hibernate中操作CLOB、BLOB字段
数据关联之一对一关联