在阅读hibernate references时看到一对多映射的相关配置,有些不懂的地方,望大家帮忙解决下.不胜感激!<class name="Person">
<id name="id" column="personId">
<generator class="native"/>
</id>
<set name="addresses" table="PersonAddress">
<key column="personId"/>
<many-to-many column="addressId"
unique="true"
class="Address"/>
</set>
</class>
<class name="Address">
<id name="id" column="addressId">
<generator class="native"/>
</id>
</class>
create table Person ( personId bigint not null primary key )
create table PersonAddress ( personId not null, addressId bigint not null primary key )
create table Address ( addressId bigint not null primary key )
问题来了:这是一对多关系映射,按平常来讲,表中应该有外键来体现一对多关系的,可以从建表语句中怎么发现不了这点呢?望高手指点其中的玄机.谢谢!

解决方案 »

  1.   

    很明显在映射文件中,标签<many-to-many>中增加了属性unique=true 这就相当于many-to-one
    而数据库表的设计当中见了三张表,而那个PersonAddress表 就是一张二维关系表,便于查找
      

  2.   

    按照2楼所说的那样,,去掉unique=true 就变成真正的many-to-many  多对多,,会自动生成中间表  id,person_id, address_id 当然 外建就可见
      

  3.   


    <set name="addresses" table="PersonAddress">
    <key column="personId"/>
    <many-to-many column="addressId"
    unique="true"
    class="Address"/>
    </set>
    这不是一对多啊,这是多对多吧! PersonAddress 是Pserson 和 Address的中间表!
    是多对多时常用的一种办法!
      

  4.   


    一般按照现在大多数的开发流程 都是先建表再弄映射
    而hibernate中可以帮你自动生成表(根据映射) 生成的时候的外键关系也会生成