实体的粒度分析:
对于Hibernate而言,所谓细粒度对象模型,主要是针对实体类设计的对象细分。对象的细分主
要出于两个目的:1 面向设计的粒度分析 :通过对象细化,实现根据清晰的系统逻辑.2 面向性能
的粒度分析:针对业务逻辑,通过合理的细粒度对象,提供系统的能耗比(性能/资源消耗)
面向设计的粒度分析:“通过对象细化,实现根据清晰的系统逻辑”,这一点并不难理解。举个例子,
在电子商务网站系统中,需要为客户生成一张配上单,这张配上单上包含了以下信息:1 订购
客户姓名 2 所订购的货物名称,数量 3 配送单编号,配送地址,配送时间。对于上面这个例
子,通过一个大型的”配送单”对象容纳所有属性,这个方案在设计角度上并不可取。我们将其
划分3个对象。Invoice(配送单) Item(订购项目) User (用户)
User
name : String
Item
name : String
count : int
Invoice
serial : String
address : String
dateTime : DateTime
1
1
1
1
1..*
1
1..*
1
图表 1 配送单细分
可以看到,通过配送单对象细分,我们体现出了更加清晰和合理的设计逻辑。在这个实例中,对
象细分更多地体现在实体的关联上,如对于上面的 3 个类,一般情况下,数据库会有 3 张表对
应。通过表关联逻辑组合成最终的发货单数据。
对于单表的对象细分,在Hibernate只能够可借助Component节点的定义完成。
何谓Component?从名字上来看,既然称之为组件,则其必然从属于某个整体的一个组成部分 ,
在 Hibernate 语 义 中 , 我 们 将 某 个 实 体 对 象 中 的 一 个 逻 辑 组 成 称 之 为 组 件
(Component).Component和实体对象的根本差别,就在于Component没有标识(identity)它作为
一个逻辑组成,完成从属于实体对象。举个例子:
包含两部分:姓名 和联系方式
T_User
id : int
age : int
firstName : String
lastName : String
address : String
zipcode : String
tel : String
Name
firstName : String
lastName : String
Contach
address : String
zipcode : String
tle : String
T_User
id : int
age : int
name : Name
contach : Contach
在Hibernate中 通过Component定义,我们将T_User表实际映射到3个类.这样我们就可以在传
统关系型数据上,实现了面向对象的领域划分。
面 向
性 能
的 粒
度 分
析:
TUserInfo
name : String
id : int
age : int
TUserProfile
image : Blob
resume : Clob
<hibernate-mapping>
<class name="blobclob.pojo.TUserInfo" table="Tuserinfo">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native" />
</id>
<property name="age" type="java.lang.Integer" />
<property name="name" type="java.lang.String" column="name" />
</class>