?? mapping.html
字號:
<tt class="literal">UPDATE</tt>操作。在特定场合(实际上,它只在一个瞬时对象(transient object)关联到一个 新的session中时执行的update()中生效),这说明Hibernate会在<tt class="literal">UPDATE</tt> 之前执行一次额外的SQL <tt class="literal">SELECT</tt>操作,来决定是否应该执行 <tt class="literal">UPDATE</tt>。 </p></td></tr><tr><td width="5%" valign="top" align="left">(11)</td><td valign="top" align="left"><p> <tt class="literal">polymorphism(多态)</tt> (可选, 默认值为 <tt class="literal">implicit (隐式) </tt>): 界定是隐式还是显式的使用多态查询(这只在Hibernate的具体表继承策略中用到-译注)。 </p></td></tr><tr><td width="5%" valign="top" align="left">(12)</td><td valign="top" align="left"><p> <tt class="literal">where</tt> (可选) 指定一个附加的SQL<tt class="literal">WHERE</tt> 条件, 在抓取这个类的对象时会一直增加这个条件。 </p></td></tr><tr><td width="5%" valign="top" align="left">(13)</td><td valign="top" align="left"><p> <tt class="literal">persister</tt> (可选): 指定一个定制的<tt class="literal">ClassPersister</tt>。 </p></td></tr><tr><td width="5%" valign="top" align="left">(14)</td><td valign="top" align="left"><p> <tt class="literal">batch-size</tt> (可选,默认是<tt class="literal">1</tt>) 指定一个用于 根据标识符(identifier)抓取实例时使用的"batch size"(批次抓取数量)。 </p></td></tr><tr><td width="5%" valign="top" align="left">(15)</td><td valign="top" align="left"><p> <tt class="literal">optimistic-lock(乐观锁定)</tt> (可选,默认是<tt class="literal">version</tt>): 决定乐观锁定的策略。 </p></td></tr><tr><td width="5%" valign="top" align="left">(16)</td><td valign="top" align="left"><p> <tt class="literal">lazy</tt> (可选): 通过设置<tt class="literal">lazy="false"</tt>, 所有的延迟加载(Lazy fetching)功能将被全部禁用(disabled)。 </p></td></tr><tr><td width="5%" valign="top" align="left">(17)</td><td valign="top" align="left"><p> <tt class="literal">entity-name</tt> (可选,默认为类名): Hibernate3允许一个类进行多次映射( 前提是映射到不同的表),并且允许使用Maps或XML代替Java层次的实体映射 (也就是实现动态领域模型,不用写持久化类-译注)。 更多信息请看<a href="persistent-classes.html#persistent-classes-dynamicmodels" title="4.4. 动态模型(Dynamic models)">第 4.4 节 “动态模型(Dynamic models)”</a> and <a href="xml.html" title="第 18 章 XML映射">第 18 章 <i>XML映射</i></a>。 </p></td></tr><tr><td width="5%" valign="top" align="left">(18)</td><td valign="top" align="left"><p> <tt class="literal">check</tt> (可选): 这是一个SQL表达式, 用于为自动生成的schema添加多行(multi-row)约束<span class="emphasis"><em>检查</em></span>。 </p></td></tr><tr><td width="5%" valign="top" align="left">(19)</td><td valign="top" align="left"><p> <tt class="literal">rowid</tt> (可选): Hibernate可以使用数据库支持的所谓的ROWIDs,例如: Oracle数据库,如果你设置这个可选的<tt class="literal">rowid</tt>, Hibernate可以使用额外的字段<tt class="literal">rowid</tt>实现快速更新。ROWID是这个功能实现的重点, 它代表了一个存储元组(tuple)的物理位置。 </p></td></tr><tr><td width="5%" valign="top" align="left">(20)</td><td valign="top" align="left"><p> <tt class="literal">subselect</tt> (可选): 它将一个不可变(immutable)并且只读的实体映射到一个数据库的 子查询中。当你想用视图代替一张基本表的时候,这是有用的,但最好不要这样做。更多的介绍请看下面内容。 </p></td></tr><tr><td width="5%" valign="top" align="left">(21)</td><td valign="top" align="left"><p> <tt class="literal">abstract</tt> (可选): 用于在<tt class="literal"><union-subclass></tt>的继承结构 (hierarchies)中标识抽象超类。 </p></td></tr></table></div></div><p> 若指明的持久化类实际上是一个接口,这也是完全可以接受的。 之后你可以用元素<tt class="literal"><subclass></tt>来指定该接口的实际实现类。 你可以持久化任何<span class="emphasis"><em>static</em></span>(静态的)内部类。 你应该使用标准的类名格式来指定类名,<tt class="literal">比如:Foo$Bar</tt>。 </p><p> 不可变类,<tt class="literal">mutable="false"</tt>不可以被应用程序更新或者删除。 这可以让Hibernate做一些小小的性能优化。 </p><p> 可选的<tt class="literal">proxy</tt>属性允许延迟加载类的持久化实例。 Hibernate开始会返回实现了这个命名接口的CGLIB代理。当代理的某个方法被实际调用的时候, 真实的持久化对象才会被装载。参见下面的“用于延迟装载的代理”。 </p><p><span class="emphasis"><em>Implicit</em></span> (隐式)的多态是指,如果查询时给出的是任何超类、该类实现的接口或者该类的 名字,都会返回这个类的实例;如果查询中给出的是子类的名字,则会返回子类的实例。 <span class="emphasis"><em>Explicit</em></span> (显式)的多态是指,只有在查询时给出明确的该类名字时才会返回这个类的实例; 同时只有在这个<tt class="literal"><class></tt>的定义中作为<tt class="literal"><subclass></tt> 或者<tt class="literal"><joined-subclass></tt>出现的子类,才会可能返回。 在大多数情况下,默认的<tt class="literal">polymorphism="implicit"</tt>都是合适的。 显式的多态在有两个不同的类映射到同一个表的时候很有用。(允许一个“轻型”的类,只包含部分表字段)。 </p><p> <tt class="literal">persister</tt>属性可以让你定制这个类使用的持久化策略。 你可以指定你自己实现 <tt class="literal">org.hibernate.persister.EntityPersister</tt>的子类,你甚至可以完全从头开始编写一个 <tt class="literal">org.hibernate.persister.ClassPersister</tt>接口的实现, 比如是用储存过程调用、序列化到文件或者LDAP数据库来实现。 参阅<tt class="literal">org.hibernate.test.CustomPersister</tt>,这是一个简单的例子 (“持久化”到一个<tt class="literal">Hashtable</tt>)。 </p><p> 请注意<tt class="literal">dynamic-update</tt>和<tt class="literal">dynamic-insert</tt>的设置并不会继承到子类, 所以在<tt class="literal"><subclass></tt>或者<tt class="literal"><joined-subclass></tt>元素中可能 需要再次设置。这些设置是否能够提高效率要视情形而定。请用你的智慧决定是否使用。 </p><p> 使用<tt class="literal">select-before-update</tt>通常会降低性能。如果你重新连接一个脱管(detache)对象实例 到一个<tt class="literal">Session</tt>中时,它可以防止数据库不必要的触发update。 这就很有用了。 </p><p> 如果你打开了<tt class="literal">dynamic-update</tt>,你可以选择几种乐观锁定的策略: </p><div class="itemizedlist"><ul type="disc"><li><p> <tt class="literal">version(版本检查)</tt> 检查version/timestamp字段 </p></li><li><p> <tt class="literal">all(全部)</tt> 检查全部字段 </p></li><li><p> <tt class="literal">dirty(脏检查)</tt>只检察修改过的字段 </p></li><li><p> <tt class="literal">none(不检查)</tt>不使用乐观锁定 </p></li></ul></div><p> 我们<span class="emphasis"><em>非常</em></span>强烈建议你在Hibernate中使用version/timestamp字段来进行乐观锁定。 对性能来说,这是最好的选择,并且这也是唯一能够处理在session外进行操作的策略(例如: 在使用<tt class="literal">Session.merge()</tt>的时候)。 </p><p> 对Hibernate映射来说视图和表是没有区别的,这是因为它们在数据层都是透明的( 注意:一些数据库不支持视图属性,特别是更新的时候)。有时你想使用视图,但却不能在数据库
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -