你可以使用class元素来定义一个持久化类.。
若指明的持久化类实际上是一个接口,这也是完全可以接受的。之后你可以用
有时你想使用视图,但却不能在数据库 中创建它(例如:在遗留的schema中)。这样的话,你可以映射一个不可变的(immutable)并且是 只读的实体到一个给定的SQL子查询表达式。定义这个实体用到的表为同步(synchronize),确保自动刷新(auto-flush)正确执行, 并且依赖原实体的查询不会返回过期数据。
字段摘要 | |
---|---|
String |
abstract
用于在 |
String |
batch-size
指定一个用于 根据标识符(identifier)抓取实例时使用的"batch size"(批次抓取数量)。 |
String |
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
覆盖在根 |
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)的时候特别有用。 |
字段详细信息 |
---|
方法详细信息 |
---|
子事物详细信息 |
---|
有两种不同的一对一关联:
主键关联
惟一外键关联
主键关联不需要额外的表字段;如果两行是通过这种一对一关系相关联的,那么这两行就共享同样的主关键字值。所以如果你希望两个对象通过主键一对一关联,你必须确认它们被赋予同样的标识值!