1 实体粒度划分的意义
在整个Hibernate技术应用之中,基本的流程:要提供有一个POJO类,而后要提供有一个POJO.hbm.xml文件,但是如果说现在假设有如下一种情况出现。
范例:定义数据库脚本
-- 删除数据表
DROP TABLE IF EXISTS 'member';
-- 创建数据表
CREATE TABLE 'member'(
mid VARCHAR(50),
mname VARCHAR(50),
mage INT,
mbirthday DATE,
maddress VARCHAR(100),
mzipcode VARCHAR(8),
mphone VARCHAR(50),
CONSTRAINT pk_nid PRIMARY KEY(nid)
);
如果按照正常的思路,那么此时生成的POJO类的结构如下。
范例:生成的POJO类的结构
public class Member implements java.io.Serializable {
// Fields
private String mid;
private String mname;
private Integer mage;
private Date mbirthday;
private String maddress;
private String mzipcode;
private String mphone;
}
有人现在会提出这样的问题,以上的设计方式不适合于面向对象的应用形式。从面向对象的角度来看以上的Member的组成应该分为:Member、MemberBasic、MemberContact。而每个类的作用如下:
(1)MemberBasic:
package org.lks.pojo;
import java.util.Date;
@SuppressWarnings("serial")
public class MemberBasic implements java.io.Serializable {
private String mname;
private Integer mage;
private Date mbirthday;
}
(2)MemberContract:
package org.lks.pojo;
@SuppressWarnings("serial")
public class MemberContact implements java.io.Serializable {
private String maddress;
private String mzipcode;
private String mphone;
}
(3)Member:
package org.lks.pojo;
@SuppressWarnings("serial")
public class Member implements java.io.Serializable {
private String mid;
private MemberBasic basic = new MemberBasic();
private MemberContact contact = new MemberContact();
}
此时的结构非常符合于面向对象的设计思想,这种的设计方式应该算是合成设计模式。
2 基于*.hbm.xml
文件实现细粒度划分
虽然现在只有一张member表,但是却发现有三个实体类,并且这些实体类之间是存有引用关系的,而要想使用Hibernate开发,就必须将这些关系再配置文件中进行展示。
所以现在的重点就在配置文件的编写上。
范例:在Member.hbm.xml文件中实现配置
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!--
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
<!-- 不管如何操作,每一个*.hbm.xml文件只会与一个POJO类关联 -->
<class name="org.lks.pojo.Member" table="member" catalog="hedb">
<id name="mid" type="java.lang.String">
<column name="mid" length="50" />
<generator class="as