- 浏览: 124224 次
- 性别:
- 来自: 地球
文章分类
最新评论
-
754731046:
很适合对初学者适用,谢谢
Oracle存储过程详解 -
天明破晓:
我测试了,不好用
Java中的正则表达式验证各种电话号码 -
OracleX:
otom31 写道从来不用标签库,几乎不用struts,除了最 ...
标签库的优点、缺点大辩论 -
otom31:
从来不用标签库,几乎不用struts,除了最早公司要使用以外; ...
标签库的优点、缺点大辩论
配置文件的基本结构如下:
<?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 数据库中。
10) foreign
使用另外一个相关联的对象的标识符作为主键。
主键配置举例如下:
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
2. 一对多关系( <many-to-one…/> 和 <set…></set> )
一对多关系一般是用在一个表与另一个表存在外键关联的时候,例如用户表的组织 id与组织表存在外键关联,则“一”方为组织表,“多”方为用户表,因为一个组织可以包含多个用户,而一个用户只能隶属于一个组织。
对于存在一对多关系和多对一关系的双方,需要在 …hbm.xml中进行相应配置,这时在“一”方(例如:组织)需要在映射文件中添加 <set…></set>元素,因为它包含多个“多”方的对象,一般的格式如下
<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" />
3. 一对一关系( <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" />
4. 多对多关系( <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>
5. 完整实例
在本小节中举一些 .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>
发表评论
-
Hibernate学习之hibernate.cfg.xml配置
2011-08-23 09:22 750<?xml version='1.0' encodi ... -
Hibernate学习之初步使用
2011-08-23 10:47 832package com.test; import j ... -
Hibernate学习之一对多关联
2011-08-23 11:02 801注意事项: 1.单向一对 ... -
Hibernate学习之三种状态及生命周期(图)
2011-08-23 11:36 793三种状态: 生命周期: 代码表示: / ... -
Hibernate学习之一对一关联
2011-08-23 13:35 765一对一关联包括两种类型:1.主键关联2.惟一外键关联 主键关 ... -
Hibernate学习包
2011-08-23 11:23 737Hibernate基础、一对一、一对多关联,及相应的工具包或j ... -
HIBERNATE关联关系映射
2011-04-25 21:29 7211、单向N-1 2、单向1-1 3、单向1-N 4、 ... -
Hibernate配置详解【转】
2011-04-25 21:22 652表 3.3. Hibernate配置属性 ... -
hibernate.cfg.xml配置总结【转】
2011-04-25 21:19 869Hibernate的描述文件可以是一个properties ... -
Hibernate主键生成策略【转】
2011-04-24 14:08 754Hibernate主键产生器 可 ... -
Hibernate HQL查询 插入 更新(update)实例 【转】
2011-04-24 14:08 8481、 实体查询: 有关实 ...
相关推荐
总之,`hibernate.hbm.xml`文件是Hibernate的核心配置文件,它清晰地定义了Java对象和数据库表之间的映射关系,以及主键生成策略。熟练掌握其结构和用法,能有效提高Hibernate应用的开发效率和数据管理的准确性。
Hibernate 是一个流行的 Java 平台上的对象关系映射(ORM)...通过理解并熟练掌握 `hbm.xml` 文件的配置,开发者可以有效地利用 Hibernate 实现对象与数据库之间的无缝映射,提高开发效率并减少数据库操作的复杂性。
在 MyEclipse 中,我们可以使用 Hibernate 根据现有的数据库表结构生成实体和 hbm.xml 配置文件,这样可以避免手动编写 JPA 或 Hibernate 实体类。下面是生成实体和 hbm.xml 文件的步骤: 首先,需要创建一个 JPA ...
`.hbm.xml`文件用于映射数据库表和Java类之间的关系,而`hibernate.cfg.xml`则是Hibernate的整体配置文件,包含了数据库连接、事务管理等核心设置。 ** Hibernate基础知识 ** Hibernate是一款流行的Java持久化框架...
标题中的“利用Middlegen Hibernate3生成hbm.xml配置和java类”指的是使用Middlegen工具来自动化创建Hibernate3框架所需的映射文件(hbm.xml)和对应的Java实体类。这个过程是数据库对象到Java对象(O/R Mapping)的...
* hbm.xml 文件:用于配置 Hibernate 的映射关系的文件。 * Id.java 文件:如果表中存在复合主键或没有主键,则将生成该文件。 四、 将生成文件整合到项目中 1. 将生成文件放在项目对应路径中:将生成的文件放在...
`Hibernate-tools`是Hibernate项目提供的一组实用工具,它包括了代码生成、反编译数据库模式到`hbm.xml`文件、JPA实体类生成等功能。在5.2.1版本中,这个工具集已经相当成熟,可以很好地支持各种定制需求。 1. **...
通过myeclipse自动生成Hibernate类文件和hbm.xml文件,链接数据库库自动生成
hibernate.queries.hbm.xml这个文件需要放在jbpm*(版本).jar中。。的org.jbpm.db目录下,先删除以前的文件,然后,换上共享中这个。。大家可以用文件比较器看看,并没有改变以前的,只是新加了。。
请输入包的名称和映射文件需要放到的文件夹之后运行CreateTableXml里的main方法,就可以自动生成映射文件了。记着刷新文件夹,要不然是看不到的。 当然只是一些基础的属性。对于一些比较复杂,还是需要自己来修改的...
在使用 MyEclipse 工具生成 POJO 类和映射文件 .hbm.xml 之前,我们需要首先配置数据库连接。MyEclipse 提供了一个 Database Explorer 视图,用于管理数据库连接。我们可以通过点击 Window -> Open Perspective... -...
hbm.xml文件中的name名字与实体类中不符合.
总结来说,MyEclipse生成hbm.xml文件的过程主要包括配置数据库连接,选择需要映射的表,通过逆向工程生成实体类和映射文件,以及处理可能的配置问题。这个过程极大地提高了开发效率,避免了手动编写大量的重复代码,...
每个实体类对应一个`.hbm.xml`文件,其中包含了类名、属性名、字段类型、主键信息以及关联关系等配置。这些信息让Hibernate能够理解如何在数据库和Java对象之间进行自动的映射和转换。 例如,对于一个名为`User`的...
在开发过程中,为了减少手动编写实体类(Entity)和对应的hbm.xml配置文件的工作量,Hibernate提供了一个逆向工程工具,可以基于现有数据库结构自动生成这些代码。 实体类是Java对象,它们代表数据库中的表,而hbm....
《hibernate.cfg.xml配置与数据库驱动详解》 在Java Web开发中,Hibernate是一个非常流行的持久化框架,它简化了数据库操作,使开发者能够更专注于业务逻辑而不是底层数据存储。而`hibernate.cfg.xml`文件是...
《Hibernate.cfg.xml配置详解》 Hibernate作为一款强大的Java对象关系映射框架,其核心配置文件Hibernate.cfg.xml在项目中起着至关重要的作用。这个文件主要负责定义数据源、连接池、SQL方言、日志以及实体类映射等...
在现代的Spring应用程序中,整合Hibernate时,我们通常会选择使用Spring的IoC(Inversion of Control)容器来管理数据访问层,而不是直接依赖于Hibernate的配置文件`hibernate.cfg.xml`。这是因为Spring提供了更高级...
在Hibernate中,XML配置文件是连接对象模型与数据库模型的关键,而`.hbm.xml`文件就是这种映射的载体。本文将深入探讨Hibernate的`.hbm.xml`配置文件以及其内部的映射类型。 首先,让我们了解`.hbm.xml`文件的作用...
“hbm.xml(模板)”是Hibernate的映射文件,它定义了Java类与数据库表之间的映射关系。开发者会在这里指定实体类的名称、属性与数据库表字段的对应,以及关联规则等。通过这种方式,Hibernate能够自动处理数据的...