当前位置:   article > 正文

Hibernate的基本标签和映射

hibernate-mapping for 标签
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>





































































声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/529012
推荐阅读
相关标签
  

闽ICP备14008679号