📄 or-mapping.html
字号:
</p></li></ul></div></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="or-mapping-s1-5"></a>5.1.6. 识别器(discriminator)</h3></div></div><div></div></div><p> 在"一棵对象继承树对应一个表"的策略中,<tt class="literal"><discriminator></tt>元素是必需的,它声明了表的识别器字段。识别器字段包含标志值,用于告知持久化层应该为某个特定的行创建哪一个子类的实例。只能使用如下受到限制的一些类型: <tt class="literal">string</tt>, <tt class="literal">character</tt>, <tt class="literal">integer</tt>, <tt class="literal">byte</tt>, <tt class="literal">short</tt>, <tt class="literal">boolean</tt>, <tt class="literal">yes_no</tt>, <tt class="literal">true_false</tt>. </p><div class="programlistingco"><pre class="programlisting"><discriminator column="discriminator_column" <span class="co"><img src="../images/callouts/1.png" alt="(1)"></span> type="discriminator_type" <span class="co"><img src="../images/callouts/2.png" alt="(2)"></span> force="true|false" <span class="co"><img src="../images/callouts/3.png" alt="(3)"></span>/></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left"><p> <tt class="literal">column</tt> (可选 - 默认为 <tt class="literal">class</tt>) 识别器字段的名字 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/2.png" alt="2" border="0"></td><td valign="top" align="left"><p> <tt class="literal">type</tt> (可选 - 默认为 <tt class="literal">string</tt>) 一个Hibernate字段类型的名字 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/3.png" alt="3" border="0"></td><td valign="top" align="left"><p> <tt class="literal">force(强制)</tt> (可选 - 默认为 <tt class="literal">false</tt>) "强制"Hibernate指定允许的识别器值,就算取得的所有实例都是根类的。 </p></td></tr></table></div></div><p> 标识器字段的实际值是根据<tt class="literal"><class></tt> 和<tt class="literal"><subclass></tt>元素的<tt class="literal">discriminator-value</tt>得来的. </p><p> <tt class="literal">force</tt>属性仅仅是在表包含一些未指定应该映射到哪个持久化类的时候才是有用的。这种情况不是经常会遇到。 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="or-mapping-s1-6"></a>5.1.7. 版本(version)(可选)</h3></div></div><div></div></div><p> <tt class="literal"><version></tt>元素是可选的,表明表中包含附带版本信息的数据。这在你准备使用<span class="emphasis"><em> 长事务(long transactions)</em></span>的时候特别有用。(见后) </p><div class="programlistingco"><pre class="programlisting"><version column="version_column" <span class="co"><img src="../images/callouts/1.png" alt="(1)"></span> name="propertyName" <span class="co"><img src="../images/callouts/2.png" alt="(2)"></span> type="typename" <span class="co"><img src="../images/callouts/3.png" alt="(3)"></span> access="field|property|ClassName" <span class="co"><img src="../images/callouts/4.png" alt="(4)"></span> unsaved-value="null|negative|undefined" <span class="co"><img src="../images/callouts/5.png" alt="(5)"></span>/></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left"><p> <tt class="literal">column</tt> (可选 - 默认为属性名): 指定持有版本号的字段名。 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/2.png" alt="2" border="0"></td><td valign="top" align="left"><p> <tt class="literal">name</tt>: 持久化类的属性名。 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/3.png" alt="3" border="0"></td><td valign="top" align="left"><p> <tt class="literal">type</tt> (可选 - 默认是 <tt class="literal">integer</tt>): 版本号的类型。 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/4.png" alt="4" border="0"></td><td valign="top" align="left"><p> <tt class="literal">access</tt> (可选 - 默认是 <tt class="literal">property</tt>): Hibernate用于访问属性值的策略。 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/5.png" alt="5" border="0"></td><td valign="top" align="left"><p> <tt class="literal">unsaved-value</tt> (可选 - 默认是<tt class="literal">undefined</tt>): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和已经在先前的session中保存或装载的实例区分开来。(<tt class="literal">undefined</tt>指明使用标识属性值进行这种判断。) </p></td></tr></table></div></div><p> 版本号必须是以下类型:<tt class="literal">long</tt>, <tt class="literal">integer</tt>, <tt class="literal">short</tt>, <tt class="literal">timestamp</tt>或者<tt class="literal">calendar</tt>。 </p></div><div class="sect2" lang="en"><div class="titlepage"><div><div><h3 class="title"><a name="or-mapping-s1-6b"></a>5.1.8. 时间戳(timestamp )(可选)</h3></div></div><div></div></div><p> 可选的<tt class="literal"><timestamp></tt>元素指明了表中包含时间戳数据。这用来作为版本的替代。时间戳本质上是一种对乐观锁定的一种不是特别安全的实现。当然,有时候应用程序可能在其他方面使用时间戳。 </p><div class="programlistingco"><pre class="programlisting"><timestamp column="timestamp_column" <span class="co"><img src="../images/callouts/1.png" alt="(1)"></span> name="propertyName" <span class="co"><img src="../images/callouts/2.png" alt="(2)"></span> access="field|property|ClassName" <span class="co"><img src="../images/callouts/3.png" alt="(3)"></span> unsaved-value="null|undefined" <span class="co"><img src="../images/callouts/4.png" alt="(4)"></span>/></pre><div class="calloutlist"><table border="0" summary="Callout list"><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/1.png" alt="1" border="0"></td><td valign="top" align="left"><p> <tt class="literal">column</tt> (可选 - 默认为属性名): 持有时间戳的字段名。 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/2.png" alt="2" border="0"></td><td valign="top" align="left"><p> <tt class="literal">name</tt>: 在持久化类中的JavaBeans风格的属性名,其Java类型是 <tt class="literal">Date</tt> 或者 <tt class="literal">Timestamp</tt>的。 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/3.png" alt="3" border="0"></td><td valign="top" align="left"><p> <tt class="literal">access</tt> (可选 - 默认是 <tt class="literal">property</tt>): Hibernate用于访问属性值的策略。 </p></td></tr><tr><td width="5%" valign="top" align="left"><img src="../images/callouts/4.png" alt="4" border="0"></td><td valign="top" align="left"><p> <tt class="literal">unsaved-value</tt> (可选 - 默认是<tt class="literal">null</tt>): 用于标明某个实例时刚刚被实例化的(尚未保存)版本属性值,依靠这个值就可以把这种情况和已经在先前的session中保存或装载的实例区分开来。(<tt class="literal">undefined</tt>指明使用标识属性值进行这种判断。) </p></td></tr></table></div></div><p> 注意,<tt class="literal"><timestamp></tt> 和<tt class="literal"><version type="timestamp"></tt>是等
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -