Hibernate映射:
有如下图数据库表结构图,通过对此图中的数据表进行hibernate映射来学习hibernate映射文件的配置:
一:hibernate基本数据类型
映射类型 | Java类型 | 数据库sql类型(oracle) |
int | Java.lang.Integer |
|
long | Java.lang.Long | number |
string | Java.lang.String | char |
string | Java.lang.String | varchar(2) |
timestamp | Java.sql.Timestamp | date |
二:实体映射
1 <hibernate-mapping package=””>
主要属性:package----指定一个包前缀,对于映射文件中没有全限定的类名,则默认使用该包前缀。
1.1 <class name=”持久化类的名称” table=”数据库表名”>
1.2 <id name=“持久化类的属性名” column=”数据库表的字段名” type=”hibernate基本数据类型”>
例如:<id name=”id” column=”USER_ID” type=”string” />无主键生成器
一般都为表设计一个没有实际意义的逻辑主键,hibernate为这种逻辑主键提供了主键生成器,它负责为每个实例化对象生成唯一的逻辑主键。(我们也可以不使用如上例所示)
Oracle中的表的主键是序列(sequence)自动生成的配置方法:
<id name=”id” column=”USER_ID” type=”long”>
<generator class=”sequence”>//这里class定义的hibernate的主键生成器类型(11大类)
<param name=”sequence”>W_PROG_SN</param>
</generator>
</id>
联合主键的配置:
<composite-id name="id" class="RolePriPk">
</composite-id>
1.3 映射普通属性
<property name=”” column=”” type=”” />
1.4实例图中数据表的pojo与映射文件配置:
一 系统程序档的配置文件(W_PROG):
public class Program extends BaseEntity<Long>{
private String progName;
private Mod progMod;
private String useRmk;
private String urlPath;
private String keyName;
private Long seq;
private String memo;
private Wuser modifyUser;
private Timestamp modifyDate;
private List<ProgDataKind> dataKinds=new ArrayList<ProgDataKind>();
private List<ProgBtn> progBtns = new ArrayList<ProgBtn>();
}
<class name="Program" table="W_PROG">//
<id name="id" column="PROG_ID" type="long">
<generator class="sequence">
<param name="sequence">W_PROG_SN</param>
</generator>
</id>//主键的配置
<property name="progName" column="PROG_NAME" type="string"></property>
<!-- 配置与模块之间的many-to-one关系 -->
<many-to-one name="progMod" class="Mod" column="MOD_ID"/>
普通属性的配置
<property name="useRmk" column="USE_RMK" type="string"></property>
<property name="urlPath" column="URL_PATH" type="string"></property>
<property name="keyName" column="KEY_NAME" type="string"></property>
<property name="seq" column="SEQ" type="long"></property>
<property name="memo" column="MEMO" type="string"></property>
<many-to-one name="modifyUser" class="Wuser" column="MODIFY_USER" />此表自己的字段
<property name="modifyDate" column="MODIFY_DATE" type="timestamp" />
<!-- 配置与W_PROG_DATAKIND表之间的N-1关系 -->使用bag 性能较好
Cascade:级联操作配置 :当需要使用到级联删除字表的数据时,需配delete-orphan。
<bag name="dataKinds" table=”W_PROG_DATAKIND” inverse="true"cascade=all,save-update,delete-orphan” 可以设置排序>
Inverse:用来标示由谁控制关联关系,我们都设置为由n得一段控制即此属性一般放在用bag 配置的一段
<key column=PROG_ID” />此key中的column配置的字段是W_PROG_DATAKIND表中的,外键
<one-to-many class="ProgDataKind" />
</bag>
配置与表W_PROG_BIN之间的n-1关系
<bag name="progBtns" table=” W_PROG_BIN” cascade="all,save-update,delete-orphan" inverse="true" >
<key column="PROG_ID" />
<one-to-many class="ProgBtn" />
</bag>
</class>
二 程序资料类别档(W_PROG_DATAKIND)
由于此表中使用了组合主键,所以我们一般给它定义一个主键类:
ProgDataKindPk类是ProgDataKind的主键类
public class ProgDataKindPk extends BasePk{
private Program program;
private String kindNo;
一些get和set方法
}
public class ProgDataKind extends BaseEntity<ProgDataKindPk>{
private String kindName;
}
ProgDataKind的配置文件:
<hibernate-mapping package="com.byd.erpit.base.model">
<class name="ProgDataKind" table="W_PROG_DATAKIND">
配置组合主键:由于ProgDataKind与Program之间的关系是many-to-one。
在Program的配置文件中我们可以看到有配置Program与ProgDataKind之间的<one-to-many class="ProgDataKind" />
<composite-id name="id" class="ProgDataKindPk">
<key-many-to-one name="program" class="Program" >
<column name="PROG_ID" />
</key-many-to-one>
<key-property name="kindNo" column="KIND_NO" type="string"/>
</composite-id>
<property name="kindName" column="KIND_NAME" type="string"/>
</class>
</hibernate-mapping>
三 程序操作键档W_PROG_BTN
此表属于W_PROG与W_BTN关联关系中的一个中间表,因此此表只有两个字段
组合主键:
public class ProgBtnPk extends BasePk{
private Program program;
private Btn programBtn;
}
public class ProgBtn extends BaseEntity<ProgBtnPk>{
此对象无任何自己的属性
}
配置文件:
<hibernate-mapping package="com.byd.erpit.base.model">
<class name="ProgBtn" table="W_PROG_BTN">
<composite-id name="id" class="ProgBtnPk">
配置与W_PROG之间的many-to-one关系
<key-many-to-one name="program" class="Program" >
<column name="PROG_ID" />
</key-many-to-one>
配置与W_BTN表之间的关系,单向的
<key-many-to-one name="programBtn" class="Btn">
<column name="BTN_NO" />
</key-many-to-one>
</composite-id>
</class>
</hibernate-mapping>
四:程序操作键W_BTN
配置文件:
<hibernate-mapping package="com.byd.erpit.base.model">
<class name="Btn" table="W_BTN">
<id name="id" column="BTN_NO" type="string" />无主键生成器
<property name="btnName" column="BTN_NAME" type="string" ></property>
<property name="keyName" column="KEY_NAME" type="string" ></property>
<property name="modifyUser" column="MODIFY_USER" type="long" ></property>
<property name="modifyDate" column="MODIFY_DATE" type="timestamp" ></property>
</class>
</hibernate-mapping>