📄 collections.html
字号:
</p></td></tr></table></div></div><p>一个拥有自己表的实体集合对应于<span class="emphasis"><em>多对多(many-to-many)关联</em></span>关系概念。多对多关联是针对Java集合的最自然映射关联关系,但通常并不是最好的关系模型。 </p><div class="programlistingco"><pre class="programlisting"><many-to-many column="column_name" <span class="co">(1)</span> class="ClassName" <span class="co">(2)</span> outer-join="true|false|auto" <span class="co">(3)</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">column</tt>(必需): 这个元素的外键关键字段名 </p></td></tr><tr><td width="5%" valign="top" align="left">(2)</td><td valign="top" align="left"><p> <tt class="literal">class</tt> (必需): 关联类的名称 </p></td></tr><tr><td width="5%" valign="top" align="left">(3)</td><td valign="top" align="left"><p> <tt class="literal">outer-join</tt> (可选 - 默认为<tt class="literal">auto</tt>): 在Hibernate系统参数中<tt class="literal">hibernate.use_outer_join</tt>被打开的情况下,该参数用来允许使用outer join来载入此集合的数据。 </p></td></tr></table></div></div><p> 例子:首先, 一组字符串: </p><pre class="programlisting"><set name="names" table="NAMES"> <key column="GROUPID"/> <element column="NAME" type="string"/></set></pre><p> 包含一组整数的bag(还设置了<tt class="literal">order-by</tt>参数指定了迭代的顺序): </p><pre class="programlisting"><bag name="sizes" table="SIZES" order-by="SIZE ASC"> <key column="OWNER"/> <element column="SIZE" type="integer"/></bag></pre><p> 一个实体数组,在这个案例中是一个多对多的关联(注意这里的实体是自动管理生命周期的对象(lifecycle objects),<tt class="literal">cascade="all"</tt>): </p><pre class="programlisting"><array name="foos" table="BAR_FOOS" cascade="all"> <key column="BAR_ID"/> <index column="I"/> <many-to-many column="FOO_ID" class="org.hibernate.Foo"/></array></pre><p> 一个map,通过字符串的索引来指明日期: </p><pre class="programlisting"><map name="holidays" table="holidays" schema="dbo" order-by="hol_name asc"> <key column="id"/> <index column="hol_name" type="string"/> <element column="hol_date" type="date"/></map></pre><p> 一个组件的列表:(下一章讨论) </p><pre class="programlisting"><list name="carComponents" table="car_components"> <key column="car_id"/> <index column="posn"/> <composite-element class="org.hibernate.car.CarComponent"> <property name="price" type="float"/> <property name="type" type="org.hibernate.car.ComponentType"/> <property name="serialNumber" column="serial_no" type="string"/> </composite-element></list></pre></div><div class="sect1" lang="zh-cn"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="collections-onetomany"></a>6.4. 一对多关联(One-To-Many Associations)</h2></div></div><div></div></div><p> <span class="emphasis"><em>一对多关联</em></span><span class="emphasis"><em>直接</em></span>连接两个类对应的表,而没有中间集合表。(这实现了一个<span class="emphasis"><em>一对多</em></span>的关系模型)(译者注:这有别与多对多的关联需要一张中间表)。 这个关系模型失去了一些Java集合的语义: </p><div class="itemizedlist"><ul type="disc" compact><li><p> map,set或list中不能包含null值 </p></li><li><p> 一个被包含的实体的实例只能被包含在一个集合的实例中 </p></li><li><p> 一个被包含的实体的实例只能对应于集合索引的一个值中 </p></li></ul></div><p> 一个从<tt class="literal">Foo</tt>到<tt class="literal">Bar</tt>的关联需要额外的关键字字段,可能还有一个索引字段指向这个被包含的实体类,<tt class="literal">Bar</tt>所对应的表。这些字段在映射时使用前面提到的<tt class="literal"><key></tt>和<tt class="literal"><index></tt>元素。 </p><p> <tt class="literal"><one-to-many></tt>标记指明了一个一对多的关联。 </p><div class="programlistingco"><pre class="programlisting"><one-to-many class="ClassName"/></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">class</tt>(必须):被关联类的名称。 </p></td></tr></table></div></div><p> 例子 </p><pre class="programlisting"><set name="bars"> <key column="foo_id"/> <one-to-many class="org.hibernate.Bar"/></set></pre><p> 注意:<tt class="literal"><one-to-many></tt>元素不需要定义任何字段。 也不需要指定表名。 </p><p>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -