Hibernate.配置详解

这里的说明大部分是老师上课提到的细节知识点,对映射文件的配置进行了详细的说明,大部分都是自己总结的,因此肯定存在疏漏、错误之处,因此请网友批评指正。
*.Customer.hbm.xml配置说明
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="cn.itcast.hibernate.domain.Customer" table="hib_customers" lazy="false">
<!-- type映射类型 -->
<id name="id" column="id" type="integer">
<generator class="increment" />
</id>
<property name="name" column="name" type="string" length="20" access="property"/>
<property name="age" column="age" type="integer" />
<property name="birthday" column="birthday" type="date" />
<!-- column属性和子元素是互斥,只能用其一 -->
<property name="married" type="boolean">
<!-- 显式指定字段类型 -->
<column name="married" sql-type="int" />
</property>
<property name="photo" type="binary">
<column name="photo" sql-type="longblob" />
</property>
<property name="description" column="description" type="text" />
<!-- 映射一对多关联关系 -->
<set name="orders" lazy="false" cascade="save-update" inverse="true">
<key column="cid" />
<one-to-many class="cn.itcast.hibernate.domain.Order" />
</set>
</class>
</hibernate-mapping>

|--<class name="cn.itcast.hibernate.domain.Customer" table="hib_customers" lazy="false">
|--table="hib_customers"
此JavaBean映射到数据库中的表名。
|--<id name="id" column="id" type="integer">
<generator class="increment" />
</id>
|--type="integer"
|--其属性值为映射类型,即:既不是java类型,也不是数据库类型。它可以理解为
处于二者之间的一种桥梁类型。
1.PrimaryType类:映射java基本数据类型,包括
ByteType、ShortType、IntegerType、
LongType、FloatType、DoubleType、
CharactorType、BooleanType。
2.DateType:映射java日期类型。
3.BinaryType:映射Byte[]类型。
|--<generator class="increment" />
|--class="increment"
这是主键生成器的生成策略,即:按照何种方式为表定义主键。具体说明如下:
表示符生成器 描述
Increment 适用于代理主键。由hibernate自动以递增的方式生成表识符,每次增量为1。
|--适用范围:
1。由于不依赖与底层数据库,适合所有的数据库系统。
2。单个进程访问同一个数据库的场合,集群环境下不推荐适用。
客户端从数据库获取max(id),拿到后+1,在返回给数据库,因此
不适合多线程访问。
3。OID必须为long、int或short类型,如果把OID定义为byte类型,抛异常。
Identity 适用于代理主键。由底层数据库生成表识符。条件是数据库支持自动增长数据类型。
|--由底层数据库生成标识符.需要把字段定义成自增型。
|--MySql适用,Oracle不适用。
Sequence 适用于代理主键。Hibernate根据底层数据库序列生成标识符。条件是数据库支持序列。
|--适用范围:
低层数据库要支持序列。Oracle DB2 SAP等。
OID必须为long、int或shot类型。
|--MySql不适用,Oracle适用。
Hilo 适用于代理主键。Hibernate根据hign/low算法生成标识符。Hibernate把特定表的字段
作为“hign”值。默认情况下,采用hibernate_unique_key表的next_hi字段。
|--使用范围:
该机制不依赖于地层数据库,因此适用于所有的数据库系统。
OID必须为long、int、short类型,如果为byte类型的话,会抛出异常。
Native 适用于代理主键。根据底层数据库对自动生成表示符的能力来选择identity、sequence、hilo
|--适用范围:
该类型能根据地层数据库系统的类型,自动选择合适的标识符生成器,因此很适合于跨数据
库的平台,即在同一个应用中需要连接多种数据库系统的场合。
OID与以上类同。
Uuid.hex 适用于代理主键。Hibernate采用128位的UUID算法来生成标识符。该算法
能够在网络环境中生成唯一的字符串标识符,这种策略并不流行,因为字符串类型的
主键比整数类型的主键占用更多的数据库空间。
assigned 适用于自然主键。由java程序负责生成标识符。不能把setID()方法声明为
Private的。尽量避免使用自然主键。
|--例如:
<id name=“id” column=“NAME” type=“string”>
<generator class=“assigned” />
</id>
|--<property name="name" column="name" type="string" length="20" access="property"/>
|--column="name"
|--映射成表中的字段名
|--length="20"
|--设置此字段的初始化长度
|--access="property"
|--1.propertye 默认值:表明hibernate通过getXXX和
setXXX来访问类属性。推荐使用。提高域模型透明性。
2.field:hibernate通过java反射机制直接访问类属性。对于没有
javabean方法的属性可设置该访问策略。
|--<property name="married" type="boolean">
<!-- 显式指定字段类型 -->
<column name="married" sql-type="int" />
</property>
|--我们在Customer类中定义了married属性,其类型是boolean类型,此时让数据库自动建表的
时候,如果不显式定义该属性的映射类型,Hibernate根据type="boolean",会将该字段
设置为byte类型,而我们要求的是int类型(0-未婚 1-已婚),因此我们要显式声明该字段
的映射类型——<column name="married" sql-type="int" />。

posted @ 2013-01-07 09:51  Struts-pring  阅读(233)  评论(0编辑  收藏  举报