hibernate映射文件及详解

上传人:豆浆 文档编号:19096581 上传时间:2017-11-18 格式:DOC 页数:6 大小:55KB
返回 下载 相关 举报
hibernate映射文件及详解_第1页
第1页 / 共6页
hibernate映射文件及详解_第2页
第2页 / 共6页
hibernate映射文件及详解_第3页
第3页 / 共6页
hibernate映射文件及详解_第4页
第4页 / 共6页
hibernate映射文件及详解_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《hibernate映射文件及详解》由会员分享,可在线阅读,更多相关《hibernate映射文件及详解(6页珍藏版)》请在金锄头文库上搜索。

1、广州 java 培训 详细讲解请上:http:/hibernate 映射文件的详解chende 2009-3-41: 操作级联(cascade )关系 cascade=none/all/save or update/deleteall : 所有情况下均进行级联操作。none:所有情况下均不进行级联操作。save-update:在执行 save-update 时进行级联操作。delete:在执行 delete 时进行级联操作。级联(cascade )在 Hibernate 映射关系中是个非常重要的概念。它指的是当主控方执行操作时,关联对象(被动方)是否同步执行同一操作。如对主控对象调用 save

2、-update 或delete 方法时,是否同时对关联对象(被动方)进行 Text Nsave-update 或 delete。例如,当用户(TUser )被更新或者删除时,其所关联的组(TGroup)不应被修改或者删除,因此,级联关系设置为 none。当设为 all 时,一旦删除了一个 TGroup,所有在这个 TGroup 内的用户都会被删除。2:hibernate-mapping schema=schemaName default-cascade=none auto-import=true package=testdefault-access=property Hibernate 用来访

3、问属性的策略。可以通过实现PropertyAccessor 接口 自定义。默认为 property 可取值为 fieldnoopdefault-lazy (可选 - 默认为 true): 指定了未明确注明 lazy 属性的 Java 属性和集合类, Hibernate 会采取什么样的默认加载风格。schema 属性指明了这个映射的表所在的 schema 名称。default-cascade 属性指定了默认的级联风格 可取值有 none、save、update 。默认为 noneauto-import 属性默认让我们在查询语言中可以使用非全限定名的类名 可取值有 true、false。packa

4、ge 属性指定一个包前缀。3.unsaved-value (可选 - 默认为一个字段判断(sensible)的值): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。 这可以把这种实例和从以前的 session 中装载过(可能又做过修改-译者注) 但未再次持久化的实例区分开来。如果有就执行 save,没有就执行update,hibernate 的主键策略就是这样的原理4.关键说一下:Key Generator 主键产生器可选项说明:1) Assigned主键由外部程序负责生成,无需 Hibernate 参与。2) hilo通过 hi/lo 算法实现的主键生成机制,需要额外的数据库表

5、保存主键生成历史状态。3) seqhilo与 hilo 类似,通过 hi/lo 算法实现的主键生成机制,只是主键历史状态保存在 Sequence 中,适用于支持 Sequence 的数据库,如 Oracle。广州 java 培训 详细讲解请上:http:/4) increment主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加 1 作为主键。这种方式可能产生的问题是:如果当前有多个实例访问同一个数据库,那么由于各个实例各自维护主键状态,不同实例可能生成同样的主键,从而造成主键重复异常。因此,如果同一数据库有多个实例访问

6、,此方式必须避免使用。5) identity采用数据库提供的主键生成机制。如 DB2、SQL Server、MySQL 中的主键生成机制。6) sequence采用数据库提供的 sequence 机制生成主键。如 Oralce 中的 Sequence。7) native由 Hibernate 根据底层数据库 (就是方言)自行判断采用 identity、hilo、sequence其中一种作为主键生成方式。8) uuid.hex由 Hibernate 基于 128 位唯一值产生算法生成 16 进制数值(编码后以长度 32 的字符串表示)作为主键。9) uuid.string与 uuid.hex 类

7、似,只是生成的主键未进行编码(长度 16) 。在某些数据库中可能出现问题(如 PostgreSQL) 。10) foreign使用外部表的字段作为主键。一般而言,利用 uuid.hex 方式生成主键将提供最好的性能和数据库平台适应性。(1)name (可选): 持久化类(或者接口)的 Java 全限定名。 如果这个属性不存在,Hibernate 将假定这是一个非 POJO 的实体映射。 (2)table (可选 - 默认是类的非全限定名): 对应的数据库表名。 (3)discriminator-value (可选 - 默认和类名一样): 一个用于区分不同的子类的值,在多态行为时使用。它可以接受

8、的值包括 null 和 not null。 (4)mutable (可选,默认值为 true): 表明该类的实例是可变的或者可变的。 (5)schema (可选): 覆盖在根元素中指定的 schema 名字。 (6)catalog (可选): 覆盖在根元素中指定的 catalog 名字。 (7)proxy (可选): 指定一个接口,在延迟装载时作为代理使用。 你可以在这里使用该类自己的名字。 (8)dynamic-update (可选, 默认为 false): 指定用于 UPDATE 的 SQL 将会在运行时动态生成,并且只更新那些改变过的字段。 (9)dynamic-insert (可选,

9、默认为 false): 指定用于 INSERT 的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。 (10)select-before-update (可选 , 默认为 false): 指定 Hibernate 除非确定对象真正被修改了(如果该值为 true译注) ,否则不会执行 SQL UPDATE 操作。在特定场合(实际上,它只在一个瞬广州 java 培训 详细讲解请上:http:/时对象(transient object)关联到一个 新的 session 中时执行的 update()中生效) ,这说明Hibernate 会在 UPDATE 之前执行一次额外的 SQL SELEC

10、T 操作,来决定是否应该执行 UPDATE。 (11)polymorphism(多态) (可选, 默认值为 implicit (隐式) ): 界定是隐式还是显式的使用多态查询(这只在 Hibernate 的具体表继承策略中用到译注) 。 (12)where (可选) 指定一个附加的 SQLWHERE 条件, 在抓取这个类的对象时会一直增加这个条件。 (13)persister (可选 ): 指定一个定制的 ClassPersister。 (14)batch-size (可选,默认是 1) 指定一个用于 根据标识符(identifier )抓取实例时使用的batch size(批次抓取数量) 。

11、 (15)optimistic-lock(乐观锁定) (可选,默认是 version): 决定乐观锁定的策略。 (16)lazy (optional): 通过设置 lazy=false, 所有的延迟加载(Lazy fetching)功能将未被激活(disabled) 。 (17)entity-name (可选): Hibernate3 允许一个类进行多次映射( 默认情况是映射到不同的表) ,并且允许使用 Maps 或 XML 代替 Java 层次的实体映射 (也就是实现动态领域模型,不用写持久化类译注) 。 更多信息请看第 4.4 节 “动态模型(Dynamic models)” and 第

12、18 章 XML 映射。 (18)catalog (可选): 这个类对应的表所使用的数据库 catalog 名称。 (19)check (可选): 这是一个 SQL 表达式, 用于为自动生成的 schema 添加多行(multi-row)约束检查。 (20)rowid (可选): Hibernate 可以使用数据库支持的所谓的 ROWIDs,例如: Oracle 数据库,如果你设置这个可选的 rowid, Hibernate 可以使用额外的字段 rowid 实现快速更新。ROWID 是这个功能实现的重点, 它代表了一个存储元组(tuple)的物理位置。 (21)subselect (可选):

13、它将一个不可变(immutable)并且只读的实体映射到一个数据库的 子查询中。它用于实现一个视图代替一张基本表,但是最好不要这样做。更多的介绍请看下面内容。(22)abstract (可选): 用于在的继承结构 (hierarchies)中标识抽象超类。 若指明的持久化类实际上是一个接口,这也是完全可以接受的。 之后你可以用来指定该接口的实际实现类。 你可以持久化任何 static(静态的)内部类。 你应该使用标准的类名格式来指定类名,比如:Foo$Bar。 不可变类,mutable=false不可以被应用程序更新或者删除。 这可以让 Hibernate 做一些小小的性能优化。 可选的 pr

14、oxy 属性允许延迟加载类的持久化实例。 Hibernate 开始会返回实现了这个命名接口的 CGLIB 代理。当代理的某个方法被实际调用的时候, 真实的持久化对象才会被装载。参见下面的“用于延迟装载的代理” 。 Implicit (隐式) 的多态是指,如果查询时给出的是任何超类、该类实现的接口或者该类的 名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。 Explicit (显式)的多态是指,只有在查询时给出明确的该类名字时才会返回这个类的实例;同时只有在这个的定义中作为 或者出现的子类,才会可能返回。 在大多数情况下,默认的polymorphism=implic

15、it都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。 (允许一个“轻型”的类,只包含部分表字段) 。 persister 属性可以让你定制这个类使用的持久化策略。 你可以指定你自己实现 org.hibernate.persister.EntityPersister 的子类,你甚至可以完全从头开始编写一个 org.hibernate.persister.ClassPersister 接口的实现, 比如是用储存过程调用、序列化到文件或广州 java 培训 详细讲解请上:http:/者 LDAP 数据库来实现。 参阅 org.hibernate.test.CustomPersis

16、ter,这是一个简单的例子 (“持久化”到一个 Hashtable) 。 请注意 dynamic-update 和 dynamic-insert 的设置并不会继承到子类, 所以在或者元素中可能 需要再次设置。这些设置是否能够提高效率要视情形而定。请用你的智慧决定是否使用。 使用 select-before-update 通常会降低性能。如果你重新连接一个脱管(detache)对象实例 到一个 Session 中时,它可以防止数据库不必要的触发 update。 这就很有用了。 如果你打开了 dynamic-update,你可以选择几种乐观锁定的策略: version(版本检查) 检查 version/timestamp 字段 all(全部) 检查全部字段 dirty(脏检查)只检察修改过的字段 none(不检查)不使用乐观锁定 我们非常强烈建议你在 Hibe

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 经济/贸易/财会 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号