[学习]Hibernate 3.2 学习笔记之五

本文详细介绍了Hibernate映射文件的结构及其配置项,包括根元素、类映射、主键生成策略及属性映射等内容,有助于理解Hibernate如何实现对象关系映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

理解Hibernate映射文件

 

映射文件实例

 

映射文件实例:

 

 

 

根元素<hibernate-mapping ... />分析

 

 

映射文件的根元素为<hibernate-mapping ... />元素,该元素下面可以有多个<class ... />子元素。每个<calss ... />元素对应了一个持久化类的映射。通常做法是一个持久化类对应一个映射文件以方便维护。

 

<hibernate-mapping ... />元素可以有如下可选属性:

 

schema:映射数据库的schema名。

catalog:映射数据库的catalog名。

default-cascade:设置Hibernate默认的级联风格,默认是none。当配置Java属性映射或者集合映射时还可以指定cascade属性以覆盖该属性。

default-access:指定Hibernate默认的属性访问策略,默认值为property,即使用getter/setter来访问。

default-lazy:设置Hibernate默认延时加载策略,默认值为true。当配置Java属性映射或者集合映射时还可以指定lazy属性以覆盖该属性。

auto-import:设置是否允许在查询语言中使用非全限定的类名(当前映射文件中),默认值为true。

package:指定Java类的包名前缀。

 

<class ... />元素分析

 

 <class ... />元素可以有如下可选的属性:

name:必选属性,指定映射的持久化类的全限定类名。

table:指定映射的数据库表明,Hibernate默认以持久化类的类名作为表名。

discriminator-value:当使用<subclass .../>元素来定义持久化类的继承关系映射时来区分不同子类的值。

mutable:指定持久化类的实例是可变对象还是不可变对象,默认值为true。

schema:指定数据表的schema值,覆盖<hibernate-mapping .../>中指定的值。

catalog:指定数据表的catalog值,覆盖<hibernate-mapping .../>中指定的值。

proxy:指定一个接口,在延时加载时作为代理使用,可以指定该类自己的名字。

dynamic-update:指定用于更新记录的update语句是否在运行时动态生成,并且只更新那些更改过的字段,默认值为false。当开启此属性时Hibernate将需要更多时间来生成SQL语句,此时映射文件可以指定下面几种乐观锁策略-version:检查version/timestamp字段 -all:检查全部字段 -dirty:只检查修改过的字段 -none:不使用乐观锁。

dynamic-insert:指定用于插入的insert语句是否动态生成,且只插入那些不为空的字段,默认值为false。

select-before-update:指定Hibernate在更新某个持久化对象之前是否需要先进行一次查询,默认值为false。若为true,Hibernate可以保证只有当持久化对象的状态被修改过才会使用update语句来保存该对象,否则不执行。

polymorphism:当采用<union-subclass .../>元素来配置继承关系时,指定是否需要采用隐士多态查询,默认为implicit。

where:指定一个附加的SQL语句的过滤条件,类似where子句,指定该属性后,Hibernate试图加载该类的持久化对象时where条件都会生效。

persiste:指定一个定制的ClassPersister用于自定义持久化该类的对象。

batch-size:根据标识符来抓取实例时每批抓取的实例数,默认为1。

optimistic-lock:指定乐观锁策略,默认为version。

lazy:是否关闭延时加载,覆盖<hibernate-mapping .../>中指定的值。

check:指定一个SQL表达式用于为该持久化类对应的表指定一个多行的check约束。

subselect:用于映射不可变的、只读实体。

 

 

主键映射策略 

 

在<class .../>中,使用<id .../>元素映射主键,<id .../>有以下属性:

name:指持久化类的标识属性名(主键名对应)。

type:标志属性的类型全名。

column:对应数据表列名。

unsaved-value:用于标识实例对象的瞬时状态,Hibenate会根据这个直来判断对象的状态,默认为type类型的默认值。

access:指定Hibernate标识属性访问策略,覆盖覆盖<hibernate-mapping .../>中指定的值,默认值为property。

generator:指定主键生成器,负责生成数据表记录的主键,常见逐渐生成器如下:

   -increment:为long、short、int类型的主键生成唯一标识,单进程使用,集群下不要使用。

   -identity:在DB2、MySql、MS SQL Server、Sybase和HypersonicSQL等提供identity(自增长)主键支持的数据库表中适用,返回long、short、int类型。

   -sequence:在DB2、PostgreSQL、Oracle、SAP DB、McKoi等提供sequence支持的数据库表中使用,返回long、short、int类型。

   -hilo:使用高/低位算法高效的生成long、short、int类型的标识符,给定一个表和字段作为高位值的来源,只在特定的数据库中是唯一的。

   -seqhilo:使用高/低位算法高效的生成long、short、int类型的标识符,要给定一个数据库的sequence名,算法与hilo不同,适用于支持sequence的数据库。

   -uuid:用一个128位的UUID算法生成字符串类型的标识符,在一个网络中是唯一的。

   -guid:在MS SQL Server和MySQL中使用数据库生成的GUID字符串。

   -native:根据底层数据库的能力选择identity、sequence或hilo中的一种。

   -assigned:应用在save()之前提供一个标识符,默认策略。

   -select:通过数据库触发器选择某个唯一主键的行,并返回主键值作为标识符。

   -foreign:直接使用另一个关联的对象的标识属性。

 

 

普通属性映射策略

Hibernate使用<property .../>元素来映射普通属性:

name:映射持久化类的属性名,必选。

column:映射数据表字段名,默认与属性名相同。

type:属性的类型(Java类型的全限定类名、Hibernate基本类型、可序列化的Java类)。

update、insert:设置Hibernate生成update或insert语句是是否要包含的字段,默认为true。

formula:指定一个SQL表达式以指定该属性的值由此表达式计算生成。

access:定义Hibernate访问属性的策略,覆盖覆盖<hibernate-mapping .../>中指定的值,默认值为property。

lazy:是否打开延时加载,覆盖覆盖<hibernate-mapping .../>中指定的值,默认值为false。

unique:映射的数据表字段是否添加唯一性约束。若为true,允许字段作为property-ref引用的目标。

not-null:映射的数据表字段是否添加not null约束。

optimistic-lock:设置该属性进行更新时是否使用乐观锁,默认为true。

generated:设置该属性映射的数据表字段的值是否由数据库生生成,可接受never-不由数据库生成、insert-insert时生成,update时不再生成、always-insert和update时都重新生成。

index:指定一个字符串的索引名称,当需要Hibernate自动建表时,用于为该属性映射的字段创建索引以加速查询。

unique_key:指定唯一键的名称,当需要Hibernate自动建表时,用于为该属性映射的字段创建唯一索引,只有当该字段具有唯一约束时才起效。

length:该属性映射的数据列的字段长度。

precision:指定该属性映射的数据列的有效数字位的位数,对数值性数据列有效。

scale:指定该属性映射的数据列的小数位数,对double、float、decimal类型有效。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值