xworker.db.hibernate.hibernate-mapping-nodes.class
事物 class(class)点击打开事物点击浏览描述

描述者:
MetaDescriptor3
thing

你可以使用class元素来定义一个持久化类.。

若指明的持久化类实际上是一个接口,这也是完全可以接受的。之后你可以用来指定该接口的实际实现类。 你可以持久化任何static(静态的)内部类。 你应该使用标准的类名格式来指定类名,比如:Foo$Bar。 对Hibernate映射来说视图和表是没有区别的,这是因为它们在数据层都是透明的( 注意:一些数据库不支持视图属性,特别是更新的时候)。

有时你想使用视图,但却不能在数据库 中创建它(例如:在遗留的schema中)。这样的话,你可以映射一个不可变的(immutable)并且是 只读的实体到一个给定的SQL子查询表达式。定义这个实体用到的表为同步(synchronize),确保自动刷新(auto-flush)正确执行, 并且依赖原实体的查询不会返回过期数据。在属性元素 和一个嵌套映射元素中都可见。

字段摘要
           String abstract
           用于在的继承结构 (hierarchies)中标识抽象超类。
           String batch-size
           指定一个用于 根据标识符(identifier)抓取实例时使用的"batch size"(批次抓取数量)。
           String catalog
           覆盖在根元素中指定的catalog名字。
           String check
           这是一个SQL表达式, 用于为自动生成的schema添加多行(multi-row)约束检查。
           String discriminator-value
           一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括 null 和 not null。 默认和类名一样
           String dynamic-insert
           指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。
           String dynamic-update
           指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。
           String entity-name
           Hibernate3允许一个类进行多次映射( 默认情况是映射到不同的表),并且允许使用Maps或XML代替Java层次的实体映射 (也就是实现动态领域模型,不用写持久化类-译注)。 更多信息请看第 5.4 节 “动态模型(Dynamic models)” and 第 19 章 XML映射
           String lazy
           通过设置lazy="false", 所有的延迟加载(Lazy fetching)功能将未被激活(disabled)。
           String mutable
           表明该类的实例是可变的或者可变的。
           String name
           持久化类(或者接口)的Java全限定名。 如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。
           String node
           
           String optimistic-lock
           决定乐观锁定的策略。
           String persister
           指定一个定制的ClassPersister。 persister属性可以让你定制这个类使用的持久化策略。
           String polymorphism
           界定是隐式还是显式的使用多态查询(这只在Hibernate的具体表继承策略中用到-译注)。
           String proxy
           指定一个接口,在延迟装载时作为代理使用。 你可以在这里使用该类自己的名字。
           String rowid
           Hibernate可以使用数据库支持的所谓的ROWIDs,例如: Oracle数据库,如果你设置这个可选的rowid, Hibernate可以使用额外的字段rowid实现快速更新。ROWID是这个功能实现的重点, 它代表了一个存储元组(tuple)的物理位置。
           String schema
           覆盖在根元素中指定的schema名字。
           String select-before-update
           指定Hibernate除非确定对象真正被修改了(如果该值为true-译注),否则不会执行SQL UPDATE操作。在特定场合(实际上,它只在一个瞬时对象(transient object)关联到一个 新的session中时执行的update()中生效),这说明Hibernate会在UPDATE 之前执行一次额外的SQL SELECT操作,来决定是否应该执行 UPDATE。 使用select-before-update通常会降低性能。如果你重新连接一个脱管(detache)对象实例 到一个Session中时,它可以防止数据库不必要的触发update。 这就很有用了。
           String subselect
           它将一个不可变(immutable)并且只读的实体映射到一个数据库的 子查询中。它用于实现一个视图代替一张基本表,但是最好不要这样做。更多的介绍请看下面内容。
           String table
           对应的数据库表名。默认是类的非全限定名。
           String where
           指定一个附加的SQLWHERE 条件, 在抓取这个类的对象时会一直增加这个条件。
 
方法摘要
 
子事物摘要
           any
          
           array
          
           bag
          
           cache
          Hibernate的Session在事务级别进行持久化数据的缓存操作。 当然,也有可能分别为每个类(或集合),配置集群、或JVM级别(SessionFactory级别)的缓存。 你甚至可以为之插入一个集群的缓存。注意,缓存永远不知道其他应用程序对持久化仓库(数据库)可能进行的修改 (即使可以将缓存数据设定为定期失效)。
           comment
          
           component
          <component>元素把子对象的一些元素与父类对应的表的一些字段映射起来。 然后组件可以定义它们自己的属性、组件或者集合。参见后面的“Components”一章。
           composite-id
          如果表使用联合主键,你可以映射类的多个属性为标识符属性。 元素接受 属性映射和属性映射作为子元素。
           discriminator
          在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的, 它定义了表的鉴别器字段。鉴别器字段包含标志值,用于告知持久化层应该为某个特定的行创建哪一个子类的实例。 如下这些受到限制的类型可以使用: string, character, integer, byte, short, boolean, yes_no, true_false.
           dynamic-component
          
           filter
          
           id
          
           idbag
          
           join
          使用<join> 元素,可以将一个类的属性映射到多张表中。
           joined-subclass
          
           list
          
           loader
          
           many-to-one
          通过many-to-one元素,可以定义一种常见的与另一个持久化类的关联。 这种关系模型是多对一关联(实际上是一个对象引用-译注):这个表的一个外键引用目标表的 主键字段。
           map
          
           meta
          
           natural-id
          
           one-to-one
          持久化对象之间一对一的关联关系是通过one-to-one元素定义的。
           primitive-array
          
           properties
          <properties> 元素允许定义一个命名的逻辑分组(grouping)包含一个类中的多个属性。 这个元素最重要的用处是允许多个属性的组合作为property-ref的目标(target)。 这也是定义多字段唯一约束的一种方便途径。
           property
          
           query
          
           resultset
          
           set
          
           sql-delete
          
           sql-insert
          
           sql-query
          
           sql-update
          
           subclass
          最后,多态持久化需要为父类的每个子类都进行定义。对于“每一棵类继承树对应一个表”的策略来说,就需要使用<subclass>定义。
           subselect
          
           synchronize
          
           timestamp
          可选的元素指明了表中包含时间戳数据。 这用来作为版本的替代。时间戳本质上是一种对乐观锁定的一种不是特别安全的实现。当然, 有时候应用程序可能在其他方面使用时间戳。
           tuplizer
          
           union-subclass
          
           version
          <version>元素是可选的,表明表中包含附带版本信息的数据。 这在你准备使用 长事务(long transactions)的时候特别有用。
 
字段详细信息

abstract点击打开事物

用于在的继承结构 (hierarchies)中标识抽象超类。

batch-size点击打开事物

指定一个用于 根据标识符(identifier)抓取实例时使用的"batch size"(批次抓取数量)。

catalog点击打开事物

覆盖在根元素中指定的catalog名字。

check点击打开事物

这是一个SQL表达式, 用于为自动生成的schema添加多行(multi-row)约束检查。

discriminator-value点击打开事物

一个用于区分不同的子类的值,在多态行为时使用。它可以接受的值包括 null 和 not null。 默认和类名一样

dynamic-insert点击打开事物

指定用于INSERT的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。

请注意dynamic-update和dynamic-insert的设置并不会继承到子类, 所以在或者元素中可能 需要再次设置。这些设置是否能够提高效率要视情形而定。请用你的智慧决定是否使用。

dynamic-update点击打开事物

指定用于UPDATE 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。

请注意dynamic-update和dynamic-insert的设置并不会继承到子类, 所以在或者元素中可能 需要再次设置。这些设置是否能够提高效率要视情形而定。请用你的智慧决定是否使用。

entity-name点击打开事物

Hibernate3允许一个类进行多次映射( 默认情况是映射到不同的表),并且允许使用Maps或XML代替Java层次的实体映射 (也就是实现动态领域模型,不用写持久化类-译注)。 更多信息请看第 5.4 节 “动态模型(Dynamic models)” and 第 19 章 XML映射

lazy点击打开事物

通过设置lazy="false", 所有的延迟加载(Lazy fetching)功能将未被激活(disabled)。

mutable点击打开事物

表明该类的实例是可变的或者可变的。

不可变类,mutable="false"不可以被应用程序更新或者删除。 这可以让Hibernate做一些小小的性能优化。

name点击打开事物

持久化类(或者接口)的Java全限定名。 如果这个属性不存在,Hibernate将假定这是一个非POJO的实体映射。

node点击打开事物


optimistic-lock点击打开事物

决定乐观锁定的策略。

如果你打开了dynamic-update,你可以选择几种乐观锁定的策略: version(版本检查) 检查version/timestamp字段 all(全部) 检查全部字段 dirty(脏检查)只检察修改过的字段 none(不检查)不使用乐观锁定 我们非常强烈建议你在Hibernate中使用version/timestamp字段来进行乐观锁定。 对性能来说,这是最好的选择,并且这也是唯一能够处理在session外进行操作的策略(例如: 在使用Session.merge()的时候)。

persister点击打开事物

指定一个定制的ClassPersister。 persister属性可以让你定制这个类使用的持久化策略。

你可以指定你自己实现 org.hibernate.persister.EntityPersister的子类,你甚至可以完全从头开始编写一个 org.hibernate.persister.ClassPersister接口的实现, 比如是用储存过程调用、序列化到文件或者LDAP数据库来实现。 参阅org.hibernate.test.CustomPersister,这是一个简单的例子 (“持久化”到一个Hashtable)。

polymorphism点击打开事物

界定是隐式还是显式的使用多态查询(这只在Hibernate的具体表继承策略中用到-译注)。

Implicit (隐式)的多态是指,如果查询时给出的是任何超类、该类实现的接口或者该类的 名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。 Explicit (显式)的多态是指,只有在查询时给出明确的该类名字时才会返回这个类的实例; 同时只有在这个的定义中作为 或者出现的子类,才会可能返回。 在大多数情况下,默认的polymorphism="implicit"都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。(允许一个“轻型”的类,只包含部分表字段)。

proxy点击打开事物

指定一个接口,在延迟装载时作为代理使用。 你可以在这里使用该类自己的名字。

可选的proxy属性允许延迟加载类的持久化实例。 Hibernate开始会返回实现了这个命名接口的CGLIB代理。当代理的某个方法被实际调用的时候, 真实的持久化对象才会被装载。

rowid点击打开事物

Hibernate可以使用数据库支持的所谓的ROWIDs,例如: Oracle数据库,如果你设置这个可选的rowid, Hibernate可以使用额外的字段rowid实现快速更新。ROWID是这个功能实现的重点, 它代表了一个存储元组(tuple)的物理位置。

schema点击打开事物

覆盖在根元素中指定的schema名字。

select-before-update点击打开事物

指定Hibernate除非确定对象真正被修改了(如果该值为true-译注),否则不会执行SQL UPDATE操作。在特定场合(实际上,它只在一个瞬时对象(transient object)关联到一个 新的session中时执行的update()中生效),这说明Hibernate会在UPDATE 之前执行一次额外的SQL SELECT操作,来决定是否应该执行 UPDATE。 使用select-before-update通常会降低性能。如果你重新连接一个脱管(detache)对象实例 到一个Session中时,它可以防止数据库不必要的触发update。 这就很有用了。

subselect点击打开事物

它将一个不可变(immutable)并且只读的实体映射到一个数据库的 子查询中。它用于实现一个视图代替一张基本表,但是最好不要这样做。更多的介绍请看下面内容。

table点击打开事物

对应的数据库表名。默认是类的非全限定名。

where点击打开事物

指定一个附加的SQLWHERE 条件, 在抓取这个类的对象时会一直增加这个条件。

 
方法详细信息
 
子事物详细信息

any点击打开事物


array点击打开事物


bag点击打开事物


cache点击打开事物

Hibernate的Session在事务级别进行持久化数据的缓存操作。 当然,也有可能分别为每个类(或集合),配置集群、或JVM级别(SessionFactory级别)的缓存。 你甚至可以为之插入一个集群的缓存。注意,缓存永远不知道其他应用程序对持久化仓库(数据库)可能进行的修改 (即使可以将缓存数据设定为定期失效)。

comment点击打开事物


component点击打开事物

<component>元素把子对象的一些元素与父类对应的表的一些字段映射起来。 然后组件可以定义它们自己的属性、组件或者集合。参见后面的“Components”一章。

composite-id点击打开事物

如果表使用联合主键,你可以映射类的多个属性为标识符属性。 元素接受 属性映射和属性映射作为子元素。

你的持久化类必须重载equals()hashCode()方法,来实现组合的标识符的相等判断。 实现Serializable接口也是必须的。

不幸的是,这种组合关键字的方法意味着一个持久化类是它自己的标识。除了对象自己之外, 没有什么方便的“把手”可用。你必须自己初始化持久化类的实例,在使用组合关键字load() 持久化状态之前,必须填充他的联合属性。我们会在第 9.4 节 “组件作为联合标识符(Components as composite identifiers)”章中说明一种 更加便捷的方法,把联合标识实现为一个独立的类,下面描述的属性只对这种备用方法有效:

discriminator点击打开事物

在"一棵对象继承树对应一个表"的策略中,<discriminator>元素是必需的, 它定义了表的鉴别器字段。鉴别器字段包含标志值,用于告知持久化层应该为某个特定的行创建哪一个子类的实例。 如下这些受到限制的类型可以使用: string, character, integer, byte, short, boolean, yes_no, true_false.

鉴别器字段的实际值是根据<class><subclass>元素中 的discriminator-value属性得来的。

dynamic-component点击打开事物


filter点击打开事物


id点击打开事物


idbag点击打开事物


join点击打开事物

使用<join> 元素,可以将一个类的属性映射到多张表中。

此特性常常对遗留数据模型有用,我们推荐表个数比类个数少,以及细粒度的领域模型。然而,在单独的继承树上切换继承映射策略是有用的,后面会解释这点。

joined-subclass点击打开事物


list点击打开事物


loader点击打开事物


many-to-one点击打开事物

通过many-to-one元素,可以定义一种常见的与另一个持久化类的关联。 这种关系模型是多对一关联(实际上是一个对象引用-译注):这个表的一个外键引用目标表的 主键字段。

map点击打开事物


meta点击打开事物


natural-id点击打开事物


one-to-one点击打开事物

持久化对象之间一对一的关联关系是通过one-to-one元素定义的。

有两种不同的一对一关联:

  • 主键关联

  • 惟一外键关联

主键关联不需要额外的表字段;如果两行是通过这种一对一关系相关联的,那么这两行就共享同样的主关键字值。所以如果你希望两个对象通过主键一对一关联,你必须确认它们被赋予同样的标识值!


primitive-array点击打开事物


properties点击打开事物

<properties> 元素允许定义一个命名的逻辑分组(grouping)包含一个类中的多个属性。 这个元素最重要的用处是允许多个属性的组合作为property-ref的目标(target)。 这也是定义多字段唯一约束的一种方便途径。

property点击打开事物


query点击打开事物


resultset点击打开事物


set点击打开事物


sql-delete点击打开事物


sql-insert点击打开事物


sql-query点击打开事物


sql-update点击打开事物


subclass点击打开事物

最后,多态持久化需要为父类的每个子类都进行定义。对于“每一棵类继承树对应一个表”的策略来说,就需要使用<subclass>定义。

每个子类都应该定义它自己的持久化属性和子类。 <version><id> 属性可以从根父类继承下来。在一棵继承树上的每个子类都必须定义一个唯一的discriminator-value。如果没有指定,就会使用Java类的全限定名。

可以在单独的映射文件中,直接在hibernate-mapping下定义subclassunion-subclassjoined-subclass映射。这样你只要增加一个新的映射文件就可以继承一棵类继承树。你必须在子类的映射中指定extends 属性来指定已映射的超类。注意:以前,这个特性使得映射文件的顺序变得很重要。从Hibernate3开始,当使用extends关键字的时候,映射文件的次序便不重要了。而在单一映射文件中,依旧需要保持将超类定义在子类之前这样的次序

subselect点击打开事物


synchronize点击打开事物


timestamp点击打开事物

可选的元素指明了表中包含时间戳数据。 这用来作为版本的替代。时间戳本质上是一种对乐观锁定的一种不是特别安全的实现。当然, 有时候应用程序可能在其他方面使用时间戳。

注意,<timestamp><version type="timestamp">是等价的。

tuplizer点击打开事物


union-subclass点击打开事物


version点击打开事物

<version>元素是可选的,表明表中包含附带版本信息的数据。 这在你准备使用 长事务(long transactions)的时候特别有用。