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" 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">

配置组合主键:由于ProgDataKindProgram之间的关系是many-to-one

Program的配置文件中我们可以看到有配置ProgramProgDataKind之间的<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_PROGW_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>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值