一对多关联通过外键连接两个类对应的表,而没有中间集合表。 这个关系模型失去了一些Java集合的语义: 一个被包含的实体的实例只能被包含在一个集合的实例中 一个被包含的实体的实例只能对应于集合索引的一个值中 一个从Product到Part的关联需要关键字字段,可能还有一个索引字段指向Part所对应的表。 <one-to-many>标记指明了一个一对多的关联。 <one-to-many 
        class="ClassName"                                  (1)
        not-found="ignore|exception"                       (2)
        entity-name="EntityName"                           (3)
        node="element-name"
        embed-xml="true|false"
    />
(1) class(必须):被关联类的名称。 
 
(2) not-found (可选 - 默认为exception): 指明若缓存的标示值关联的行缺失,该如何处理: ignore 会把缺失的行作为一个空关联处理。 
 
(3) entity-name (可选): 被关联的类的实体名,作为class的替代。 
 例子 <set name="bars">
    <key column="foo_id"/>
    <one-to-many class="org.hibernate.Bar"/>
</set>
注意:<one-to-many>元素不需要定义任何字段。 也不需要指定表名。 重要提示:如果一对多关联中的外键字段定义成NOT NULL,你必须把<key>映射声明为not-null="true",或者使用双向关联,并且标明inverse="true"。参阅本章后面关于双向关联的讨论。 下面的例子展示一个Part实体的map,把name作为关键字。( partName 是Part的持久化属性)。注意其中的基于公式的索引的用法。 <map name="parts"
        cascade="all">
    <key column="productId" not-null="true"/>
    <map-key formula="partName"/>
    <one-to-many class="Part"/>
</map>

解决方案 »

  1.   

    你声明两个类,比方说是Customer和order,现在你在customer中声明一个set集合类,这个集合里存放的就是order对象,.这就是先在代码里建立1对N的关系.然后你在映射文件Customer.hbm.xml和Order.hbm.xml里按照网上一对多的配置方法进行配置,就可以了。
      

  2.   

    要建立一个一对多的双向关联,你可以通过把一个一对多关联,作为一个多对一关联映射到到同一张表的字段上,并且在"多"的那一端定义inverse="true"。 <class name="Parent">
        <id name="id" column="parent_id"/>
        ....
        <set name="children" inverse="true">
            <key column="parent_id"/>
            <one-to-many class="Child"/>
        </set>
    </class><class name="Child">
        <id name="id" column="child_id"/>
        ....
        <many-to-one name="parent" 
            class="Parent" 
            column="parent_id"
            not-null="true"/>
    </class>
      

  3.   

    那请问如果使用select做one to many的连接,可以使用left outer join吗