`
wfwkiss
  • 浏览: 127092 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

*.hbm.xml配置文件

阅读更多
转载地址:http://hi.baidu.com/cykxwx/blog/item/263545d7008ac0d9a144dfdf.html
===============================================================================
在Hibernate中,各表的映射文件….hbm.xml可以通过工具生成,例如在使用MyEclipse开发时,它提供了自动生成映射文件的工具。下面简单的讲述一下这些配置文件的配置。

       配置文件的基本结构如下:
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="包名">
<class name="类名" table="表名">
                  <id name="主键在java类中的字段名" column="对应表中字段" type="类型 ">
                    <generator class="主键生成策略"/>
           </id>
          ……
    </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

采用数据库提供的主键生成机制。如DB2、SQL Server、MySQL 中的主键生成机制。

6) sequence

采用数据库提供的 sequence 机制生成主键。如 Oralce 中的Sequence。

7) native

由 Hibernate 根据使用的数据库自行判断采用 identity、hilo、sequence 其中一种作为主键生成方式。

8) uuid.hex

由 Hibernate 基于128 位 UUID 算法 生成16 进制数值(编码后以长度32 的字符串表示)作为主键。

9) uuid.string

与uuid.hex 类似,只是生成的主键未进行编码(长度16),不能应用在 PostgreSQL 数据库中。

=============================================================================
  在hibernate2.1中,主键生成策略中uuid分为uuid.hex和uuid.string,但是从hibernate3.0开始已经不再支持uuid.string,查看changelog可以发现:



Changes in version 3.0 beta 1 (21.12.2004)
* removed uuid.string and renamed uuid.hex to plain uuid

  hibernate3.x的api中AbstractUUIDGenerator类只有UUIDHexGenerator子类了,

  使用时在hibernate的映射文件中,配置成<generator class="uuid"/>;(其实写成uuid.hex也是可以用的,但官方的reference文档中是uuid,所以不推荐写成uuid.hex)

原文来自:http://gocom.primeton.com/modules/newbb/forumtopic27101_8767_66.htm?PHPSESSID=8...

=============================================================================

10) foreign

使用另外一个相关联的对象的标识符作为主键。

主键配置举例如下:
<id name="id" column="id" type="java.lang.Integer">
             <generator class="native"/>
</id>

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

       开发人员可以打开网址:http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd

来查看hibernate3.0的dtd信息,可看到property的定义如下:

<!ELEMENT property (meta*,(column|formula)*,type?)>
                     <!ATTLIST property name CDATA #REQUIRED>
                     <!ATTLIST property node CDATA #IMPLIED>
                     <!ATTLIST property access CDATA #IMPLIED>
                     <!ATTLIST property type CDATA #IMPLIED>
                     <!ATTLIST property column CDATA #IMPLIED>
                     <!ATTLIST property length CDATA #IMPLIED>
                     <!ATTLIST property precision CDATA #IMPLIED>
                     <!ATTLIST property scale CDATA #IMPLIED>
                     <!ATTLIST property not-null (true|false) #IMPLIED>
                     <!ATTLIST property unique (true|false) "false">
                     <!ATTLIST property unique-key CDATA #IMPLIED>
                     <!ATTLIST property index CDATA #IMPLIED> 
                      <!-- include the columns spanned by this property in an index -->
                     <!ATTLIST property update (true|false) #IMPLIED>
                     <!ATTLIST property insert (true|false) #IMPLIED>
                      <!ATTLIST property optimistic-lock (true|false) "true"> 
                     <!-- only supported for properties of a class (not component) -->
                     <!ATTLIST property formula CDATA #IMPLIED>
                     <!ATTLIST property lazy (true|false) "false">
    <!ATTLIST property generated (never|insert|always) "never">

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

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

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

Eg3. <property name="description" column="description" type="java.lang.String" />
3. 一对多关系(<many-to-one…/>和<set…></set>)

       一对多关系一般是用在一个表与另一个表存在外键关联的时候,例如用户表的组织id与组织表存在外键关联,则“一”方为组织表,“多”方为用户表,因为一个组织可以包含多个用户,而一个用户只能隶属于一个组织。

对于存在一对多关系和多对一关系的双方,需要在…hbm.xml中进行相应配置,这时在“一”方(例如:组织)需要在映射文件中添加<set…></set>元素,因为它包含多个“多”方的对象,一般的格式如下:
<set name="java映射类中对应的属性" inverse="true" lazy="true">
<key column="表中对应字段"/>
              <one-to-many class="多方的类"/>
</set>

       Eg.
<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" />
Eg.
<many-to-one name="org" column="orgId" class="Organization" not-null="true" />
4. 一对一关系(<one-to-one…/>)
一对一关系相对一对多关系来说比较少见,但也在某些情况下要用到,例如有一个用户的基本信息表(USER)和一个用户的密码表(PASSWD)就存在一对一的关系。下面来看一下一对一关系在Hibernate的配置。
其中主表(eg. 用户的基本信息表)的配置如下:
<one-to-one name="主表对象中子表对象的属性名" class="子表对象的类名" cascade="save-update"/>
Eg. <one-to-one name="password" class="com.amigo.dao.pojo.Passwd" cascade="save-update"/>
子表(eg. 用户的密码表)的配置如下:
<one-to-one name="子表对象中主表对象的属性名" class="主表对象的类名" constrained="true" />
Eg. <one-to-one name="user" class="com.amigo.dao.pojo.User " constrained="true" />
5. 多对多关系(<many-to-many…/>)

在数据库设计时,一般将多对多关系转换为两个一对多(或多对一)关系,例如在基于角色的权限系统中,用户和角色存在的关系就是典型的多对多关系,即一个用户可以具有多个角色,而一个角色又可以为多个用户所有,一般在设计时,都会加一个用户与角色的关联表,该表与用户表以及角色表都存在外键关联。

在本小节中讲述的是没有分解的多对多关系在Hibernate中如何配置。设置格式如下:
<set name="java对象的属性名" table="表名" cascade="all" outer-join="false">  
<key column="表的对应字段"/>  
<many-to-many class="另一个表的对象类" column="另一个表的字段"/>  
</set> 
Eg. 上述的多对多关系可以表示为:

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>
6. 完整实例

在本小节中举一些.hbm.xml映射文件的例子,让开发人员对其有一个感性的认识。接下来讲述一个用户表(tbl_user)、用户与角色关联表(tbl_user_role)、角色表(tbl_role)以及组织表(tbl_organization)的例子。

(1)tbl_user
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                             "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.amigo.dao.pojo">
    <class name="User" table="tbl_user">
         <id name="loginname" column="loginName" type="java.lang.String">
            <generator class="assigned"/>
        </id>
        <property name="name" column="name" type="java.lang.String" not-null="true" />
        <property name="password" column="password" type="java.lang.String" not-null="true" />
        <property name="mobile" column="mobile" type="java.lang.String" />
        <property name="telephone" column="telephone" type="java.lang.String" />
        <property name="email" column="email" type="java.lang.String" />
        <property name="createtime" column="createTime" type="java.util.Date" not-null="true" />
        <property name="lastlogintime" column="lastLoginTime" type="java.util.Date" />
        <property name="logintimes" column="loginTimes" type="java.lang.Long" not-null="true" />
        <property name="state" column="state" type="java.lang.Byte" not-null="true" />
        <property name="description" column="description" type="java.lang.String" />
        <many-to-one name="organization" column="orgId" class="Organization" not-null="true" />
        <set name="userRoleSet" inverse="true" cascade="all-delete-orphan" lazy="true">
            <key column="loginName"/>
            <one-to-many class="UserRole"/>
        </set>
</hibernate-mapping>

(2)tbl_organization
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.amigo.dao.pojo">
    <class name="Organization" table="tbl_organization">
        <id name="orgid" column="orgId" type="java.lang.Long">
            <generator class="native"/>
        </id>
      <property name="parentorgid" column="parentOrgId" type="java.lang.Long" not-null="true" />
        <property name="orgname" column="orgName" type="java.lang.String" not-null="true" />
        <property name="orgfullname" column="orgFullName" type="java.lang.String" />
        <property name="orglevel" column="orgLevel" type="java.lang.Integer" not-null="true" />
        <property name="state" column="state" type="java.lang.Byte" not-null="true" />
        <property name="description" column="description" type="java.lang.String" />
        <property name="creator" column="creator" type="java.lang.String" />
        <property name="createtime" column="createTime" type="java.util.Date" />
        <set name="userSet" inverse="true" lazy="true">
            <key column="orgId"/>
            <one-to-many class="User"/>
        </set>
    </class>
</hibernate-mapping>

(3)tbl_user_role
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
                            "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
                           "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.cotel.netvote.dao.model">
    <class name="UserRole" table="tbl_user_role">
        <id name="urid" column="urId" type="java.lang.Integer">
<generator class="native"/>
</id>
<many-to-one name="role" column="roleId" class="Role" not-null="true" />
<many-to-one name="user" column="loginName" class="User" not-null="true" />
</class>
</hibernate-mapping>

(4)tbl_ role
<?xml version="1.0" encoding='UTF-8'?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >
<hibernate-mapping package="com.cotel.netvote.dao.model">
     <class name="Role" table="tbl_role">
            <id name="roleid" column="roleId" type="java.lang.Integer">
             <generator class="native"/>
        </id>
         <property name="rolename" column="roleName" type="java.lang.String" not-null="true" />
       <property name="createdate" column="createDate" type="java.util.Date" not-null="true" />
       <property name="description" column="description" type="java.lang.String" />
         <set name="userRoleSet" inverse="true" lazy="true" cascade="all">
               <key column="roleId"/>
                <one-to-many class="UserRole"/>
         </set>
   </class>
</hibernate-mapping>
分享到:
评论

相关推荐

    Xdoclet生成*.hbm.xml映射文件

    在Java开发中,尤其是在使用Hibernate作为持久层框架时,数据库模型与Java对象之间的映射文件*.hbm.xml是必不可少的。这种映射文件定义了数据库表与Java实体类之间的对应关系,方便ORM(Object-Relational Mapping)...

    xdoclet 用于生成*.hbm.xml

    标题提到的"xdoclet 用于生成*.hbm.xml"表明xdoclet主要被用来自动生成Hibernate的映射文件——.hbm.xml。 Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许开发者使用Java对象来操作数据库,而无需编写...

    hibernate.hbm.xml详解

    总之,`hibernate.hbm.xml`文件是Hibernate的核心配置文件,它清晰地定义了Java对象和数据库表之间的映射关系,以及主键生成策略。熟练掌握其结构和用法,能有效提高Hibernate应用的开发效率和数据管理的准确性。

    Hibernate的........htm.xml和hibernatecfg.xml配置

    标题提及的是“Hibernate的.htm.xml和hibernatecfg.xml配置”,这显然是指在使用Hibernate框架时,涉及到的两个关键配置文件:`.htm.xml`(可能是误写,通常为`.hbm.xml`)和`hibernate.cfg.xml`。`.hbm.xml`文件...

    使用MyEclipse工具生成POJO类和映射文件.hbm.xml

    在使用 MyEclipse 工具生成 POJO 类和映射文件 .hbm.xml 之前,我们需要首先配置数据库连接。MyEclipse 提供了一个 Database Explorer 视图,用于管理数据库连接。我们可以通过点击 Window -&gt; Open Perspective... -...

    hbm xml配置详解 ssh框架

    在Hibernate中,XML配置文件是连接对象模型与数据库模型的关键,而`.hbm.xml`文件就是这种映射的载体。本文将深入探讨Hibernate的`.hbm.xml`配置文件以及其内部的映射类型。 首先,让我们了解`.hbm.xml`文件的作用...

    Oracle自动生成hibernate实体(.java 和.hbm.xml文件)存储过程

    每个实体类对应一个`.hbm.xml`文件,其中包含了类名、属性名、字段类型、主键信息以及关联关系等配置。这些信息让Hibernate能够理解如何在数据库和Java对象之间进行自动的映射和转换。 例如,对于一个名为`User`的...

    Address.hbm.xml

    Address类对应的配置文件

    Hibernate 配置详解 (一)

    本文将详细解析Hibernate配置中的两个关键文件——`hibernate.cfg.xml`和`*.hbm.xml`,并探讨它们在Hibernate运行机制中的作用。 #### hibernate.cfg.xml:全局配置的核心 `hibernate.cfg.xml`文件作为Hibernate的...

    JAVA SSH青协志愿服务管理系统源码.rar

    Hibernate 持久性访问层 *.hbm.xml(类—-表,属性–字段) 2注解 项目包 1,action 控制器 2,dao 操作数据库— 3,model 实体类模型 4,service 逻辑业务层 5,util 工具类 log4j.properties 日志文件 *.properties...

    JAVA SSH青协志愿服务管理系统源码

    Hibernate 持久性访问层 *.hbm.xml(类—-表,属性–字段) 2注解 项目包 1,action 控制器 2,dao 操作数据库— 3,model 实体类模型 4,service 逻辑业务层 5,util 工具类 log4j.properties 日志文件 *.properties...

    在myeclipse中根据表结构生成实体和hbm.xml文件

    在 MyEclipse 中,我们可以使用 Hibernate 根据现有的数据库表结构生成实体和 hbm.xml 配置文件,这样可以避免手动编写 JPA 或 Hibernate 实体类。下面是生成实体和 hbm.xml 文件的步骤: 首先,需要创建一个 JPA ...

    利用hibernate自动生成hbm.xml文件和entity类.doc

    * hbm.xml 文件:用于配置 Hibernate 的映射关系的文件。 * Id.java 文件:如果表中存在复合主键或没有主键,则将生成该文件。 四、 将生成文件整合到项目中 1. 将生成文件放在项目对应路径中:将生成的文件放在...

    spring如何摒弃hibernate.cfg.xml

    在现代的Spring应用程序中,整合Hibernate时,我们通常会选择使用Spring的IoC(Inversion of Control)容器来管理数据访问层,而不是直接依赖于Hibernate的配置文件`hibernate.cfg.xml`。这是因为Spring提供了更高级...

    Hibernate3所有包和配置文件

    3. ***.hbm.xml**: 这些是Hibernate的映射文件,用于定义Java类与数据库表之间的映射关系。每个.hbm.xml文件对应一个Java实体类,它详细描述了类的属性如何映射到数据库表的列,以及主键、外键等关系。例如,`User....

    hibernate.cfg.xml文件

    《深入理解Hibernate配置文件hibernate.cfg.xml》 在Java应用程序开发中,Hibernate是一个非常流行的对象关系映射(ORM)框架,它简化了数据库操作,将数据库操作与业务逻辑解耦。而`hibernate.cfg.xml`是Hibernate...

    ssh框架配置文件的实例

    3. **applicationContext.xml**:Spring的核心配置文件,它定义了bean的创建、依赖注入、AOP(面向切面编程)规则等。例如,你可以在这里声明数据源、事务管理器、DAO(数据访问对象)和Service层的bean,通过Spring...

    NHibernate实例代码 三种hbm.xml加载方式

    在 NHibernate 中,`hbm.xml` 文件是用于定义对象和数据库表之间映射的关键文件。本实例代码详细介绍了三种不同的 `hbm.xml` 加载方式,这对于理解和使用 NHibernate 进行数据持久化至关重要。 1. **文档直接引用**...

    structs的配置文件hbm.xml

    ### structs的配置文件hbm.xml知识点详解 #### 一、概述 在介绍具体的配置细节之前,我们先来了解一下struts2、Hibernate3.2以及Spring2.0这三种技术的基本概念及其整合的意义。 1. **Struts2**:是Apache基金会...

    从hbm的xml文件 自动生成数据库表

    2. **创建hbm.xml文件**: 对每一个Java实体类,编写对应的hbm.xml文件,定义实体类与数据库表的映射关系。 3. **使用Hibernate工具**: Hibernate提供了SchemaExport或HibernateTool工具,可以读取hbm.xml文件并生成...

Global site tag (gtag.js) - Google Analytics