读书人

hibernate投射文件配置

发布时间: 2012-09-16 17:33:17 作者: rapoo

hibernate映射文件配置

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" style="margin: 0cm 0cm 0pt;">?

</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 style="text-align: left; margin: 0cm 0cm 0pt;">?????????????????????????? <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" 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" 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 />

?????? </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 />

????????????? </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 />

?????? <composite-id name="id" style="text-align: left; margin: 0cm 0cm 0pt;">?????? ?????? <key-many-to-one name="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" style="text-align: left; margin: 0cm 0cm 0pt;">???????????????????? 配置与W_PROG之间的many-to-one关系

?????? ?????? <key-many-to-one name="program" >

????????????? ?? ???? <column name="PROG_ID" />

????????????? ?? </key-many-to-one>

???????????????????? 配置与W_BTN表之间的关系,单向的

????????????? ?? <key-many-to-one name="programBtn" style="text-align: left; margin: 0cm 0cm 0pt;">????????????? ?? ?????????? <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>

?

读书人网 >软件架构设计

热点推荐