📄 mapping.html
字号:
<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.update()</tt>的时候)。 记住version或timestamp属性永远不能使null,不管何种<tt class="literal">unsaved-value</tt>策略,否则实例会被认为是尚未被持久化的。 </p></div><div class="sect2" lang="zh-cn"><div class="titlepage"><div><div><h3 class="title"><a name="mapping-declaration-id"></a>5.1.4. id</h3></div></div><div></div></div><p> 被映射的类<span class="emphasis"><em>必须</em></span>声明对应数据库表主键字段。大多数类有一个JavaBeans风格的属性,为每一个实例包含唯一的标识。<tt class="literal"><id></tt> 元素定义了该属性到数据库表主键字段的映射。 </p><div class="programlistingco"><pre class="programlisting"><id name="propertyName" <span class="co">(1)</span> type="typename" <span class="co">(2)</span> column="column_name" <span class="co">(3)</span> unsaved-value="any|none|null|id_value" <span class="co">(4)</span> access="field|property|ClassName"> <span class="co">(5)</span> <generator class="generatorClass"/></id></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> (可选): 标识属性的名字。 </p></td></tr><tr><td width="5%" valign="top" align="left">(2)</td><td valign="top" align="left"><p> <tt class="literal">type</tt> (可选): 标识Hibernate类型的名字。 </p></td></tr><tr><td width="5%" valign="top" align="left">(3)</td><td valign="top" align="left"><p> <tt class="literal">column</tt> (可选 - 默认为属性名): 主键字段的名字。 </p></td></tr><tr><td width="5%" valign="top" align="left">(4)</td><td valign="top" align="left"><p> <tt class="literal">unsaved-value</tt> (可选 - 默认为<tt class="literal">null</tt>): 一个特定的标识属性值,用来标志该实例是刚刚创建的,尚未保存。这可以把这种实例和从以前的session中装载过(可能又做过修改--译者注)但未再次持久化的实例区分开来。 </p></td></tr><tr><td width="5%" valign="top" align="left">(5)</td><td valign="top" align="left"><p> <tt class="literal">access</tt> (可选 - 默认为<tt class="literal">property</tt>): Hibernate用来访问属性值的策略。 </p></td></tr></table></div></div><p> 如果 <tt class="literal">name</tt>属性不存在,会认为这个类没有标识属性。 </p><p> <tt class="literal">unsaved-value</tt> 属性很重要!如果你的类的标识属性不是默认为<tt class="literal">null</tt>的,你应该指定正确的默认值。 </p><p> 还有一个另外的<tt class="literal"><composite-id></tt>声明可以访问旧式的多主键数据。我们强烈不鼓励使用这种方式。 </p><div class="sect3" lang="zh-cn"><div class="titlepage"><div><div><h4 class="title"><a name="mapping-declaration-id-generator"></a>5.1.4.1. generator</h4></div></div><div></div></div><p> 必须声明的<tt class="literal"><generator></tt>子元素是一个Java类的名字,用来为该持久化类的实例生成唯一的标识。如果这个生成器实例需要某些配置值或者初始化参数,用<tt class="literal"><param></tt>元素来传递。 </p><pre class="programlisting"><id name="id" type="long" column="uid" unsaved-value="0"> <generator class="net.sf.hibernate.id.TableHiLoGenerator"> <param name="table">uid_table</param> <param name="column">next_hi_value_column</param> </generator></id></pre><p> 所有的生成器都实现<tt class="literal">net.sf.hibernate.id.IdentifierGenerator</tt>接口。这是一个非常简单的接口;某些应用程序可以选择提供他们自己特定的实现。当然,Hibernate提供了很多内置的实现。下面是一些内置生成器的快捷名字: </p><div class="variablelist"><dl><dt><span class="term"><tt class="literal">increment(递增)</tt></span></dt><dd><p> 用于为<tt class="literal">long</tt>, <tt class="literal">short</tt>或者<tt class="literal">int</tt>类型生成唯一标识。只有在没有其他进程往同一张表中插入数据时才能使用。 <span class="emphasis"><em>在集群下不要使用。</em></span> </p></dd><dt><span class="term"><tt class="literal">identity</tt></span></dt><dd><p> 对DB2,MySQL, MS SQL Server, Sybase和HypersonicSQL的内置标识字段提供支持。返回的标识符是<tt class="literal">long</tt>, <tt class="literal">short</tt> 或者<tt class="literal">int</tt>类型的。 </p></dd><dt><span class="term"><tt class="literal">sequence (序列)</tt></span></dt><dd><p> 在DB2,PostgreSQL, Oracle, SAP DB, McKoi中使用序列(sequence),而在Interbase中使用生成器(generator)。返回的标识符是<tt class="literal">long</tt>, <tt class="literal">short</tt>或者 <tt class="literal">int</tt>类型的。 </p></dd><dt><span class="term"><tt class="literal">hilo (高低位)</tt></span></dt><dd><p><a name="mapping-declaration-id-hilodescription"></a> 使用一个高/低位算法来高效的生成<tt class="literal">long</tt>, <tt class="literal">short</tt>或者 <tt class="literal">int</tt>类型的标识符。给定一个表和字段(默认分别是是<tt class="literal">hibernate_unique_key</tt> 和<tt class="literal">next_hi</tt>)作为高位值得来源。高/低位算法生成的标识符只在一个特定的数据库中是唯一的。<span class="emphasis"><em>在使用JTA获得的连接或者用户自行提供的连接中,不要使用这种生成器。</em></span> </p></dd><dt><span class="term"><tt class="literal">seqhilo(使用序列的高低位)</tt></span></dt><dd><p> 使用一个高/低位算法来高效的生成<tt class="literal">long</tt>, <tt class="literal">short</tt>或者 <tt class="literal">int</tt>类型的标识符,给定一个数据库序列(sequence)的名字。 </p></dd><dt><span class="term"><tt class="literal">uuid.hex</tt></span></dt><dd><p> 用一个128-bit的UUID算法生成字符串类型的标识符。在一个网络中唯一(使用了IP地址)。UUID被编码为一个32位16进制数字的字符串。 </p></dd><dt><span class="term"><tt class="literal">uuid.string</tt></span></dt><dd><p> 使用同样的UUID算法。UUID被编码为一个16个字符长的任意ASCII字符组成的字符串。<span class="emphasis"><em>不能使用在PostgreSQL数据库中</em></span> </p></dd><dt><span class="term"><tt class="literal">native(本地)</tt></span></dt><dd><p> 根据底层数据库的能力选择<tt class="literal">identity</tt>, <tt class="literal">sequence</tt> 或者<tt class="literal">hilo</tt>中的一个。 </p></dd><dt><span class="term"><tt class="literal">assigned(程序设置)</tt></span></dt><dd><p> 让应用程序在<tt class="literal">save()</tt>之前为对象分配一个标示符。 </p></dd><dt><span class="term"><tt class="literal">foreign(外部引用)</tt></span></dt><dd><p> 使用另外一个相关联的对象的标识符。和<tt class="literal"><one-to-one></tt>联合一起使用。 </p></dd></dl></div><p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -