hibernate关联的问题?
现在开始学hibernate,今天看了一本hibernate的书,里面,有一个例子,tb_dept表包含的字段id(唯一标识int型),deptName(varchar型),tb_staff表包含的字段id(唯一标识int型),dept_id(varchar型),staff_name(varchar型),书本里的意思就是用id来表示部门编号和员工编号。TbDept.hbm.xml配置
        <set name="tbStaffs" inverse="true" cascade="all">
            <key>
                <column name="dept_id" />
            </key>
            <one-to-many class="com.formBean.TbStaff" />
        </set>TbStaff.hbm.xml配置
<many-to-one name="tbDept" column="dept_id" class="com.formBean.TbDept" cascade="none" lazy="false"/>TbStaff怎么知道dept_id字段对应b_dept表的id呢?

解决方案 »

  1.   

    不是有个:
    <key> 
                    <column name="dept_id" /> 
                </key>么?
      

  2.   

    完整的TbDept.hbm.xml配置如下:
    <class name="com.formBean.TbDept" table="tb_dept" schema="dbo" catalog="db_database03">
            <id name="id" type="java.lang.Integer">
                <column name="id" />
                <generator class="increment" />
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" length="50" />
            </property>
            <property name="deptId" type="java.lang.Integer">
                <column name="deptId" />
            </property>
            <set name="tbStaffs" inverse="true" cascade="all">
                <key>
                    <column name="dept_id" />
                </key>
                <one-to-many class="com.formBean.TbStaff" />
            </set>
        </class>
    我就是问,怎么知道对应的是tb_dept里面的id字段,而不是deptId字段呢?hibernate里面规定了只能和主键对应?
      

  3.   

    或许是你看的这本书的印刷问题!
    应该是这样的:
    <set name="tbStaffs" inverse="true" cascade="all"> 
    <key> 
    <column name="id"/> 

    </key> 
    <one-to-many class="com.formBean.TbStaff" column="dept_id"/
    </set> 不知是否是这么个情况?
      

  4.   

    说起来比较乱其实,书本上原先tb_staff表和tb_dept表是这样的,如下
    <class name="mrmwq.hibernate.Staff" table="tb_staff">    <id name="id" column="id" type="int">
          <generator class="increment"/>
        </id>    <property name="name" column="name" type="string" not-null="true"/>
        <property name="sex" column="sex" type="string" not-null="true"/>
        <property name="birthday" column="birthday" type="date" not-null="true"/>
        <property name="idCard" column="idCard" type="string" not-null="true"/>
        <property name="nation" column="nation" type="string" not-null="true"/>
        <property name="schoolage" column="schoolage" type="string" not-null="true"/>
        <property name="nativePlace" column="nativePlace" type="string" not-null="true"/>
        <property name="address" column="address" type="string" not-null="true"/>    <many-to-one name="dept" column="dept_id" class="mrmwq.hibernate.Dept" cascade="none" lazy="false"/>  </class><class name="mrmwq.hibernate.Dept" table="tb_dept">    <id name="id" column="id" type="int">
          <generator class="increment"/>
        </id>    <property name="name" column="name" type="string" not-null="true"/>    <set name="staffs" cascade="save-update" lazy="false">
          <key column="dept_id"/>
          <one-to-many class="mrmwq.hibernate.Staff"/>
        </set>  </class>
    书本上的实例运行没有问题。
    现在他是把tb_dept表里面的id字段和tb_staff表里面的dept_id对应起来。只是我不想用tb_dept表里面的id作为部门编号,想在里面加个deptId字段作为部门编号,和tb_staff表里面的dept_id字段相对应,就不知道怎么配置这两个表的xml文件了。