理解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类型有效。