<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- 
    Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.sms.po.User" table="user" catalog="sms">
        <id name="id" type="java.lang.String">
            <column id="id" length="50" />
            <generator class="native"></generator>
        </id>
        <property name="pwd" type="java.lang.String">
            <column name="pwd" length="50" />
        </property>
        <set name="banks" inverse="true" cascade="all" table="bank" lazy="true" >
            <key>
                <column name="id" length="50" />
            </key>
            <one-to-many class="com.sms.po.Bank" />
        </set>
        <set name="wages" inverse="true" cascade="all" table="wage" lazy="true">
            <key>
                <column name="id" length="50" />
            </key>
            <one-to-many class="com.sms.po.Wage" />
        </set>
    </class>
</hibernate-mapping>如此配置访问出错如果user表的主键id只是bank的外键,除去上述user.hbm.xml中的
        <set name="wages" inverse="true" cascade="all" table="wage" lazy="true">
            <key>
                <column name="id" length="50" />
            </key>
            <one-to-many class="com.sms.po.Wage" />
        </set>
就可以正常访问?
求原因、对策

解决方案 »

  1.   

    映射没配完整就会报错
    <set name="wages" inverse="true">
      <key>
        <column name="userId" />             // 你这一行列的应该是从表中外键字段名称
      </key>
      <one-to-many class="com.sms.po.Wage" />
    </set>注意:如果是要给出数据库字段名称的时候一定要注意大小写建议你通过MyEclipse 反向工程自动映射出你的配置文件
      

  2.   

    解决了:当一表的中主键是其他多张表的外键时,除在主键对应的PO中定义所有外键表所对应的PO属性(Set类型) 外,该PO还要继承 Serializable。