您的位置:首页 > 其它

Hibernate映射文件介绍

2016-08-08 10:19 106 查看

Hibernate映射文件介绍

hibernate映射文件结构如下

<hibernate-mapping auto-import="true" default-lazy="false"><class /> <class />.....</hibernate-mapping>映射文件的根元素为<hibernate-mapping.../>元素,该元素下可以有多个</class .../>子元素,每个<class .../>子元素对应一个持久化类的映射。

<hiberante-mapping .../>元素可选属性

schema:指定所映射数据库的Schema名,如果指定了该属性,则表名会自动添加该Schema前缀。 catelog:指定所映射数据库的Catelog名,如果指定了该属性,则表名会自动添加该Catelog前缀。 default-cascade:设置Hibernate默认的级联风格,该属性默认值是none。当配置Java属性映射和集合映射时还可指定cascade属性,用于覆盖该处的级联风格。如果配置了Java属性映射、集合映射时没有指定cascade属性,则Hiberante将采用此处指定的级联风格。 default-access:指定hibernate默认的属性访问策略,默认值为property,即使用getter/setter方法对来访问属性,如果指定access=”field”,则Hibernate会忽略getter/setter方法对,而是通过反射来访问成员变量。如果需要实现自己的属性访问策略,则需要自己提供PropertyAccessor接口的实现类,再在access中设置自定义属性访问策略类的名字。 default-lazy:设置Hibernate默认的延迟加载策略,该属性值默认为true,即启用延迟加载策略。当配置Java属性映射和集合映射时还可指定lazy属性,用于覆盖该处的延迟加载策略。如果配置Java属性映射、集合映射时没有指定lazy属性,则Hibernate将采用此处指定的延迟加载策略。 注意: 通常情况下,不应该关闭延迟加载策略,例如当加载一个Teacher对象,且该Teacher对象有N个关联的student对象时,如果关闭延迟加载策略,则Hibernate在加载Techer对象时会自动加载所有的Student对象--如果该Techer对象有1万个关联的Student对象,更甚至有100万个,而程序仅需要访问Teacher对象,则一次加载这些对象纯属多余。
auto-import:设置是否允许在查询语言中使用非全限定类的类名(仅限于本映射文件中的类)。该属性默认是true。 注意:如果同一份映射文件中有两个持久化类映射,它们的类名是一样的(只是处于不同包结构下,它们全限定类名不同,依然是两个不同的类),则应该设置auto-import=”false”;否则Hibernate将无法准确分别两个类,从而导致Hibernate抛出异常。
package:该属性指定一个包前缀,对于映射文件中没有指定全限定的类名,则默认使用该包前缀。

<class .../>元素可选属性

name:指定类的名字,如果<hibernate-mapping .../>没有指定package,则此处必须为全限定类名。 table:指定该持久化类映射的表名,Hibernate默认以持久化类的类名作为表名。 discriminator-value:指定区分不同子类的值,当使用<subclass .../>元素来定义持久化类的继承关系映射时需要使用该属性。 mutable:用于指定持久化类的实例是可变对象还是不可变对象,该属性只能接受true和false两个属性值,该属性默认值是true。 proxy:指定一个接口,在延迟装载时作为代理使用,也可以再这里指定该类自己的名字。 dynamic-update:指定用于更新记录的update语句是否在运行时动态生成,并且只更新哪些改变过的字段。该属性默认值是false。开启该属性将导致Hibernate需要更多时间来生成SQL语句。注意: 当程序打开了dynamic-update之后,映射文件可以指定如下几种乐观锁定的策略。2 version:检查version/timestamp字段2 all:检查全部字段2 dirty:只检查修改过的字段2 none:不适用乐观锁定。 非常强烈建议你在Hibernate中使用version/timestamp字段来进行乐观锁定,对性能来
说,这是最好的选择,并且这也是唯一能够处理在Session外进行托管操作的策略。
dynamic-insert:指定用于插入记录的insert语句是否在运行时动态生成,并且只插入哪些非空字段。该属性默认是false.开启该属性将导致Hibernate需要更多时间来生成sql语句。 select-before-udpate:指定Hibernate在更新某个持久化对象之前是否需要先进行一次select。如果指定该属性为true,则Hibernate可以保证只用当持久化对象的状态被修改过,才会使用update语句来保存其状态 (即程序显式使用saveOrUpdate()来保存该对象,但如果Hiberante查询到对应记录与吃救护对象的状态相同,则不会使用update语句来保存其状态 ).该属性默认是false. 注意: 通常来说,使用select-before-update会降低性能。如果应用程序中某个持久化类对象 的状态经常发生变化,那么该属性应该设置为false;如果该持久化对象的状态很少发生 改变,而程序又经常要保存该对象,则可以将该属性设置为true. ploymorphism:当采用<union-subclass .../>元素来配置继承映射时,该元素指定是否需要采用隐式多态查询。该属性的默认值为implicit. 注意: 当指定polymorphism为true时,如果查询时给出的是任何超类,该类实现的接口或该类的名字都会返回该类(及其子类)的实例;如果查询中给出的是子类的名字,则只返回子类的实例。否则只用在查询时明确给出某个类名时,才会返回这个类的实例。大部分时候我们都需要使用隐式多态。 where:指定一个附加的SQL语句中过滤条件(类似于添加where子句),如果一旦指定了该属性,则不管采用load()、get()还是其他查询方法,只要试图加载该持久化对象时,该where条件都会生效。也就是说,只有复合该where条件的记录才会被加载出来。 persister:指定一个定制的ClassPersister。 batch-size:指定根据标识符(identifer)来抓取实例时每批抓取的实例数。该属性值默认是1. optimistic-lock:该属性指定乐观锁定策略。该属性的默认值是version. check:指定一个SQL表达式,用于为持久化类所对应的表指定一个多行的Check约束。 subselect:该属性用于映射不可变的、只读实体。通俗地说,就是数据库的子查询映射成Hibernate持久化对象。当需要使用视图(其实就是一个查询)来代替数据表时,该属性比较有用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息