hibernate基本映射标签和属性
1.<hibernate-mapping>标签
- <hibernate-mapping
- schema="schemaName" (1)
- catalog="catalogName" (2)
- default-cascade="cascade_style" (3)
- default-access="field|property|ClassName" (4)
- default-lazy="true|false" (5)
- auto-import="true|false" (6)
- package="package.name" (7)
- />
(1) schema (可选): 数据库schema的名称。
(2) catalog (可选): 数据库catalog的名称。
(3) default-cascade (可选 - 默认为 none): 默认的级联风格。
(4) default-access (可选 - 默认为 property): Hibernate用来访问所有属性的策略。可以通过实现PropertyAccessor接口 自定义。
(5) default-lazy (可选 - 默认为 true): 指定了未明确注明lazy属性的Java属性和集合类, Hibernate会采取什么样的默认加载风格。
(6) auto-import (可选 - 默认为 true): 指定我们是否可以在查询语言中使用非全限定的类名(仅限于本映射文件中的类)。
(7) package (可选): 指定一个包前缀,如果在映射文档中没有指定全限定的类名, 就使用这个作为包名。 假若有两个持久化类,它们的非全限定名是一样的(就是两个类的名字一样,所在的包不一样),应该设置auto-import="false".如果把一个“import”的名字对应两个类,Hibernate会拋出一个异常hibernate-mapping元素允许嵌套多个<class>映射,但***的做法是一个持久化类对应一个映射文件,并以持久化的超类名称命名。如:Xxx.hbm.xml
2.<class>标签
- <class
- name="ClassName" (1)
- table="tableName" (2)
- dynamic-update="true|false" (3)
- dynamic-insert="true|false" (4)
- optimistic-lock="none|version|dirty|all" (5)
- lazy="true|false" (6)
- />
(1)name(可选):持久化类(或者接口)的Java全限定名。如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射
(2)table(可选-默认是类的非全限定名):对应数据库表名,生成DDL时数据表名,如果省略,则名称同持久化类名称
(3)dynamic-update(可选,默认为false):指定用于UPDATE的SQL将会在运行时动态生成,只更新那些被改过的字段
(4)dynamic-insert(可选,默认为false):指定用于insert的sql将会在运行时动态生成,并且只包含那些非空字段
(5) optimistic-lock(乐观锁定) (可选,默认是version): 决定乐观锁定的策略。
(6) lazy (可选): 通过设置lazy="false", 所有的延迟加载(Lazy fetching)功能将被全部禁用(disabled)。
3.<id>标签
<id>标签必须配置在<class>标签的***个位置。由一个字段构成主键,<id>元素定义了该属性到数据库表主键字段的映射
- <id name="propertyName" (1)
- type="typename" (2)
- column="column_name"> (3)
- length="length"> (4)
- <generator class="generatorClass" />
- </id>
(1)name:实体类的属性名字
(2)type:标识Hibernate类型的名字(省略则使用Hibernate默认类型),也可以自己配置类型(integer,long,short,float,double,character,byte,boolean,yes_no,true_false)
(3)column(可选-默认为属性名):主键字段的名字(省略则取name为字段名)
(4)length(可选):当type为varchar时,设置字段长度
<generator>元素(主键生成策略)
主键生成策略必须配置,用来为该持久化类的实例生成唯一的标识。
uuid:
用一个128-bit的UUID算法生成字符串类型的标识符,这在一个网络中是唯一的(使用了IP地址),UUID被编码为一个32位16进制数字的字符串,它的生成是由Hibernate生成,一般不会重复UUID包含:IP地址,JVM的启动时间,系统时间和一个计算器值。
native:
根据底层数据库的能力选择identity,sequence或者hilo中的一个(数据库自增)
assigned:
让程序在save()之前为对象分配一个表示符。这是<generator>元素没有指定时的默认生成策略。(如果是手动分配,则需要设置此配置)
5.<property>标签
用于映射普通属性到表字段
- <property
- name="propertyName"
- column="column_name"
- type="typename"
- length=""
- unique=""
- not-null=""
- >
- </property>
注:如果实体类和实体类中的属性和SQL中的关键字重复,必须采用table或column重新命名
6.Hibernate完整映射实例:
- <?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属性:实体类的完整路径
- * table属性:实体类映射到数据库中的表名,如果省略,则为实体类的类名称
- -->
- <class name="com.wjt276.hibernate.User1">
- <!-- 映射数据库主键 映射到数据表中的字段名默认为类属性名,但可以利用column重新指定-->
- <id name="id" column="id">
- <!-- generator设置主键生成策略 uuid:一万年内生成唯一的字符串 -->
- <generator class="uuid"/>
- </id>
- <!--
- property 映射普通属性 映射到数据表中的字段名默认为类属性名,但可以利用column重新指定
- unique:唯一约束;
- not-null:非空约束
- length:字段长度
- -->
- <property name="name" unique="true" not-null="true" length="20"/>
- <property name="password" not-null="true" length="10"/>
- <property name="createTime"/><!--Hibernate会自动根据实体类属性类型生成数据库表中字段类型 -->
- <property name="expireTime"/>
- </class>
- </hibernate-mapping>
原文链接:http://blog.csdn.net/fengxuezhiye/article/details/7368865
【编辑推荐】