Hibernate的基本标签和映射

开发 后端
本文讲解了Hibernate的基本映射标签和属性,主要讲解了一些主要的标签,如class、id、hibernate-mapping等到比较适合初学者学习,详细情况下文。

hibernate基本映射标签和属性

1.<hibernate-mapping>标签

  1. <hibernate-mapping  
  2.          schema="schemaName"                          (1)  
  3.          catalog="catalogName"                        (2)  
  4.          default-cascade="cascade_style"              (3)  
  5.          default-access="field|property|ClassName"    (4)  
  6.          default-lazy="true|false"                    (5)  
  7.          auto-import="true|false"                     (6)  
  8.          package="package.name"                       (7)  
  9.  /> 

(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>标签

  1. <class 
  2.         name="ClassName"                              (1)  
  3.         table="tableName"                             (2)  
  4.         dynamic-update="true|false"                   (3)  
  5.         dynamic-insert="true|false"                   (4)  
  6.         optimistic-lock="none|version|dirty|all"      (5)  
  7.         lazy="true|false"                             (6)  
  8. /> 

(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>元素定义了该属性到数据库表主键字段的映射

  1. <id name="propertyName"         (1)  
  2.     type="typename"             (2)  
  3.     column="column_name">        (3)  
  4.     length="length">             (4)  
  5.      <generator class="generatorClass" />  
  6. </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>标签

用于映射普通属性到表字段

  1. <property  
  2.      name="propertyName" 
  3.      column="column_name" 
  4.      type="typename" 
  5.      length="" 
  6.      unique="" 
  7.      not-null="" 
  8.  >  
  9. </property> 

注:如果实体类和实体类中的属性和SQL中的关键字重复,必须采用table或column重新命名

6.Hibernate完整映射实例:

  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping>  
  6.     <!--   
  7.         class标签 实体类映射到数据表  
  8.         * name属性:实体类的完整路径  
  9.         * table属性:实体类映射到数据库中的表名,如果省略,则为实体类的类名称   
  10.     -->  
  11.     <class name="com.wjt276.hibernate.User1">  
  12.         <!-- 映射数据库主键 映射到数据表中的字段名默认为类属性名,但可以利用column重新指定-->  
  13.         <id name="id" column="id">  
  14.             <!-- generator设置主键生成策略  uuid:一万年内生成唯一的字符串 -->  
  15.             <generator class="uuid"/>  
  16.         </id>  
  17.         <!--   
  18.             property 映射普通属性  映射到数据表中的字段名默认为类属性名,但可以利用column重新指定  
  19.             unique:唯一约束;  
  20.             not-null:非空约束  
  21.             length:字段长度  
  22.         -->  
  23.         <property name="name" unique="true" not-null="true" length="20"/>  
  24.         <property name="password" not-null="true" length="10"/>  
  25.         <property name="createTime"/><!--Hibernate会自动根据实体类属性类型生成数据库表中字段类型 -->  
  26.         <property name="expireTime"/>  
  27.     </class>  
  28. </hibernate-mapping>  

原文链接:http://blog.csdn.net/fengxuezhiye/article/details/7368865

【编辑推荐】

  1. Java集合框架总结:Set接口的使用
  2. Java的位移运算巧方法
  3. Java7的一个新类JLayer:装饰的Swing组件
  4. 关于Java中内存溢出的解决办法
  5. Java中的面向对象特性
责任编辑:林师授 来源: fengxuezhiye的博客
相关推荐

2009-02-16 09:20:39

基本定则OR映射Hibernate

2012-02-03 11:17:33

HibernateJava

2012-02-02 16:13:29

HibernateJava

2009-09-23 08:56:18

Hibernate cHibernate i

2012-02-06 13:34:49

HibernateJava

2009-06-16 14:36:54

Hibernate继承

2009-09-22 15:10:22

Hibernate映射

2009-09-23 17:34:18

Hibernate映射

2009-09-25 10:00:47

Hibernate映射

2012-02-03 10:07:04

HibernateJava

2009-06-02 14:46:26

Hibernate关系映射教程

2016-12-15 08:38:50

1 Hibernate基本配置

2009-09-25 14:20:28

Hibernate继承映射

2009-09-23 13:26:10

Hibernate对象

2009-09-25 12:31:13

Hibernate映射

2009-09-28 14:54:33

Hibernate映射

2009-09-25 09:46:02

Hibernate高级

2009-09-29 15:58:22

Hibernate映射

2009-09-27 10:02:29

定制Hibernate

2009-09-25 12:59:52

Hibernate映射
点赞
收藏

51CTO技术栈公众号