hibernate映射配置文件详解

hibernate映射配置文件详解

映射配置文件基本结构如下:

<hibernate-mapping>
    <class name="cn.itcast.elec.domain.ElecText" table="elec_text">
        <id name="textID" type="string"> 
            <column name="textID" sql-type="varchar(50)" not-null="true"/>
            <generator class="uuid"></generator>
        </id>
        <property name="textName" type="java.lang.String">
            <column name="textName" sql-type="varchar(50)"/>
        </property>
        <property name="textDate" type="date">
            <column name="textDate" />
        </property>
        <property name="textRemark" type="string">
            <column name="textRemark" sql-type="varchar(500)"></column>
        </property>
    </class>
</hibernate-mapping>

1、主键(id)
hibernate的主键生成策略有如下几种:
1)assigned
主键由外部程序负责生成,在save()之前指定。
2)hilo
通过hi/lo算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。
3)seqhilo
与hilo类似,通过hi/lo算法实现的主键生成机制,需要数据库中的sequence,适用于支持sequence的数据库,如oracle。
4)increment
主键按数值顺序递增,此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加1作为主键,这种方式可能产生的问题是:不能在集群下使用
5)identity
采用数据库提供的主键生成机制。如果MySQL、SQL Server中的主键生成机制。
6)sequence
采用数据库提供的sequence机制生成主键,如Oracle中的sequence。
7)native
由hibernate根据使用的数据库自行判断传菜员的identity、hilo、sequence其中一种作为主键生成方式。
8)uuuid.hex
由hibernate基于128位UUUID算法生成16进制数值(32位字符串)作为主键
9)uuuid.string
与uuuid.hex类似,只是生成的主键未进行编码(长度16位),不能应用在PostgreSQL数据中。
10)foreign
使用另外一个相关联的对象的标识符作为主键。
主键配置举例如下:

 <id name="id" column="id" type="java.lang.Integer">  
    <generator class="native"/>   
 </id>   

另外还可以扩展hibernate的类来做自己的主键生成策略,具体例子见:http://www.javaeye.com/topic/93391
2、普通属性(property)

属性中比较常用的有:name(对应的java类的属性名称)、column(对应的表中的字段)、type(属性的类型,eg.java.lang.String)、not-null(设置该属性是否为空,为true时表示非空,默认为false)和length(字段的长度限制)。 示例如下:

<property name="accessname" column="accessName" type="java.lang.String" not-null="true" />   

<property name="state" column="state" type="java.lang.Byte" not-null="true" />   

<property name="description" column="description" type="java.lang.String" />  

1)Hibernate中映射关系文件中,每个字段的配置都
需要通过type来指定转换的类型,这个类型可以
是Java类型,也可以是Hibernate预置的类型。
2)Java类型
–需要写完整的类路径
–对于布尔值的转换,没有默认的Java类型可以
处理,如果一定要使用Java类型来处理,需要
自定义一个类,并实现接口UserType
3)Hibernate预置的映射类型(推荐)
(1)整数
byte,short,integer,long
(2)小数
float,double
(3)字符串
string
(4)日期(年月日)
date,可以将数据库中的日期类型转换为
java.sql.Date
(5)时间(时分秒)
time,可以将数据库中的日期类型转换为
java.sql.Time
(6)时间戳(年月日时分秒)
timestamp,可以将数据库中的日期类型转换为
java.sql.Timestamp
(7)布尔
yes_no:
可以将数据库中的y/n转换为java.lang.Boolean
中的true/false
true_false:
可以将数据库中的t/f转换为java.lang.Boolean
中的true/false
3. 一对多关系(

    <set name="java映射类中对应的属性" inverse="true" lazy="true">   
          <key column="表中对应字段"/>   
            <one-to-many class="多方的类"/>   
   </set>   

     <!-- 示例 -->  
     <set name="userSet" inverse="true" lazy="true">   
                <key column="orgId"/>   
                 <one-to-many class="User"/>   
      </set>  
 “多”方(例如:用户)隶属于一个“一”方对象,一般的格式如下:
 <many-to-one name="java映射类中对应的属性" column="表中对应字段" class="类名" not-null="true" />   
  <!-- 示例 -->  
 <many-to-one name="org" column="orgId" class="Organization" not-null="true" />  

4、 一对一关系
一对一关系相对一对多关系来说比较少见,但也在某些情况下要用到,例如有一个用户的基本信息表(USER)和一个用户的密码表(PASSWD)就存在一对一的关系。下面来看一下一对一关系在Hibernate的配置。


<!-- 其中主表(eg. 用户的基本信息表)的配置 -->  
<one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名" cascade="save-update"/>   
<one-to-one name="password" class="com.amigo.dao.pojo.Passwd" cascade="save-update"/>   
<!-- 子表(eg. 用户的密码表)的配置 -->  
 <one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" />   
 <one-to-one name="user" class="com.amigo.dao.pojo.User" constrained="true" /> 

5、多对多关系
在数据库设计时,一般将多对多关系转换为两个一对多(或多对一)关系,例如在基于角色的权限系统中,用户和角色存在的关系就是典型的多对多关系,即一个用户可以具有多个角色,而一个角色又可以为多个用户所有,一般在设计时,都会加一个用户与角色的关联表,该表与用户表以及角色表都存在外键关联。
在本小节中讲述的是没有分解的多对多关系在Hibernate中如何配置。设置格式如下:

<set name="java对象的属性名" table="表名" cascade="all" outer-join="false">  
         <key column="表的对应字段"/>  
         <many-to-many class="另一个表的对象类" column="另一个表的字段"/>  
    </set>     
    <!-- t_user方 -->  
    <set name="roleSet" table="t_user" cascade="all" outer-join="false">  
        <key column="roleId"/>  
        <many-to-many class="com.amigo.dao.pojo.Role" column="roleId"/>  
     </set>     
    <!-- t_role方 -->  
    <set name="userSet" table="t_role" cascade="all" outer-join="false">  
        <key column="roleId"/>  
        <many-to-many class="com.amigo.dao.pojo.User" column="roleId"/>  
     </set>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值