📄 mapping.html
字号:
discriminator-value="discriminator_value" <span class="co">(3)</span> mutable="true|false" <span class="co">(4)</span> schema="owner" <span class="co">(5)</span> proxy="ProxyInterface" <span class="co">(6)</span> dynamic-update="true|false" <span class="co">(7)</span> dynamic-insert="true|false" <span class="co">(8)</span> select-before-update="true|false" <span class="co">(9)</span> polymorphism="implicit|explicit" <span class="co">(10)</span> where="arbitrary sql where condition" <span class="co">(11)</span> persister="PersisterClass" <span class="co">(12)</span> batch-size="N" <span class="co">(13)</span> optimistic-lock="none|version|dirty|all" <span class="co">(14)</span> lazy="true|false" <span class="co">(15)</span>/></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left">(1)</td><td valign="top" align="left"><p> <tt class="literal">name</tt>: 持久化类(或者接口)的Java全限定名。 </p></td></tr><tr><td width="5%" valign="top" align="left">(2)</td><td valign="top" align="left"><p> <tt class="literal">table</tt>: 对应的数据库表名。 </p></td></tr><tr><td width="5%" valign="top" align="left">(3)</td><td valign="top" align="left"><p> <tt class="literal">discriminator-value(辨别值)</tt> (可选 - 默认和类名一样):一个用于区分不同的子类的值,在多态行为时使用。 </p></td></tr><tr><td width="5%" valign="top" align="left">(4)</td><td valign="top" align="left"><p> <tt class="literal">mutable(可变)</tt> (可选, 默认值为 <tt class="literal">true</tt>): 表明该类的实例可变(不可变)。 </p></td></tr><tr><td width="5%" valign="top" align="left">(5)</td><td valign="top" align="left"><p> <tt class="literal">schema</tt> (可选): 覆盖在根<tt class="literal"><hibernate-mapping></tt>元素中指定的schema名字。 </p></td></tr><tr><td width="5%" valign="top" align="left">(6)</td><td valign="top" align="left"><p> <tt class="literal">proxy</tt> (可选): 指定一个接口,在延迟装载时作为代理使用。你可以在这里使用该类自己的名字。 </p></td></tr><tr><td width="5%" valign="top" align="left">(7)</td><td valign="top" align="left"><p> <tt class="literal">dynamic-update(动态更新)</tt> (可选,默认为<tt class="literal">false</tt>): 指定用于<tt class="literal">UPDATE</tt> 的SQL将会在运行时动态生成,并且只更新那些改变过的字段。 </p></td></tr><tr><td width="5%" valign="top" align="left">(8)</td><td valign="top" align="left"><p> <tt class="literal">dynamic-insert(动态插入)</tt> (可选, 默认为<tt class="literal">false</tt>): 指定用于<tt class="literal">INSERT</tt>的 SQL 将会在运行时动态生成,并且只包含那些非空值字段。 </p></td></tr><tr><td width="5%" valign="top" align="left">(9)</td><td valign="top" align="left"><p> <tt class="literal">select-before-update</tt> (可选,默认值为<tt class="literal">false</tt>): 指定Hibernate除非确定对象的确被修改了,<span class="emphasis"><em>不会</em></span>执行SQL <tt class="literal">UPDATE</tt>操作。在特定场合(实际上,只会发生在一个临时对象关联到一个新的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">(10)</td><td valign="top" align="left"><p> <tt class="literal">polymorphism(多形,多态)</tt> (可选, 默认值为 <tt class="literal">implicit (隐式)</tt>): 界定是隐式还是显式的使用查询多态。 </p></td></tr><tr><td width="5%" valign="top" align="left">(11)</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">(12)</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">(13)</td><td valign="top" align="left"><p> <tt class="literal">batch-size</tt> (可选,默认是<tt class="literal">1</tt>) 指定一个用于根据标识符抓取实例时使用的"batch size"(批次抓取数量)。 </p></td></tr><tr><td width="5%" valign="top" align="left">(14)</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">(15)</td><td valign="top" align="left"><p> <tt class="literal">lazy(延迟)</tt> (可选): 假若设置 <tt class="literal">lazy="true"</tt>,就是设置这个类自己的名字作为<tt class="literal">proxy</tt>接口的一种等价快捷形式。 </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">net.sf.hibernate.persister.EntityPersister</tt>的子类,你甚至可以完全从头开始编写一个<tt class="literal">net.sf.hibernate.persister.ClassPersister</tt>接口的实现,可能是用储存过程调用、序列化到文件或者LDAP数据库来实现的。参阅<tt class="literal">net.sf.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>通常会降低性能.当是在防止数据库不必要的触发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>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -