<hibernate-mapping>
    <class name="org.qsm.Major" table="major">
        <id name="id" type="java.lang.String">
            <column name="id" length="2" />
            <generator class="assigned" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" length="20" not-null="true" />
        </property>
        <property name="shortname" type="java.lang.String">
            <column name="shortname" length="10" not-null="true" />
        </property>
        <property name="department" type="java.lang.String">
            <column name="department" length="4" not-null="true" />
        </property>
        <set name="classeses" inverse="true">
            <key>
                <column name="majorid" length="2" not-null="true" />
            </key>
            <one-to-many class="org.qsm.Classes" />
        </set>
    </class>
</hibernate-mapping><hibernate-mapping>
    <class name="org.qsm.Classes" table="classes">
        <id name="id" type="java.lang.Integer">
            <column name="id" />
            <generator class="native" />
        </id>
        <many-to-one name="major" class="org.qsm.Major" fetch="select">
            <column name="majorid" length="2" not-null="true" />
        </many-to-one>
        <property name="name" type="java.lang.String">
            <column name="name" length="10" not-null="true" />
        </property>
    </class>
</hibernate-mapping>public class Major implements java.io.Serializable{
    private static final long serialVersionUID=7049254736951558367L;
    private String id;
    private String name;
    private String shortname;
    private String department;
    private Set classeses=new HashSet(0);
    public String getId(){
        return this.id;
    }
    public void setId(String id){
        this.id=id;
    }
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name=name;
    }
    public String getShortname(){
        return this.shortname;
    }
    public void setShortname(String shortname){
        this.shortname=shortname;
    }
    public String getDepartment(){
        return this.department;
    }
    public void setDepartment(String department){
        this.department=department;
    }
    public Set getClasseses(){
        return this.classeses;
    }
    public void setClasseses(Set classeses){
        this.classeses=classeses;
    }
}public class Classes implements java.io.Serializable{
    private static final long serialVersionUID=6183334115113485272L;
    private Integer id;
    private Major major;
    private String name;
    public Integer getId(){
        return this.id;
    }
    public void setId(Integer id){
        this.id=id;
    }
    public Major getMajor(){
        return this.major;
    }
    public void setMajor(Major major){
        this.major=major;
    }
    public String getName(){
        return this.name;
    }
    public void setName(String name){
        this.name=name;
    }
}//测试语句
        Major m=new Major();
        Classes c=new Classes();
        m.setId("10");
        m.setName("hhhhhh");
        m.setShortname("dddddd");
        m.setDepartment("00001");
        c.setName("计科041");
        c.setMajor(m);
        m.getClasseses().add(c);
        Session session=HibernateSessionFactory.getSession(); 
        Transaction tran=this.session.beginTransaction();
        session.save(m);
        tran.commit();
        session.close();
数据库脚本
CREATE TABLE `classes` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(10) NOT NULL default '',
  `majorid` varchar(2) NOT NULL default '',
  PRIMARY KEY  (`id`),
  KEY `pk_majorid` (`majorid`),
  CONSTRAINT `pk_majorid` FOREIGN KEY (`majorid`) REFERENCES `major` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;CREATE TABLE `major` (
  `id` varchar(2) NOT NULL default '',
  `name` varchar(20) NOT NULL default '',
  `shortname` varchar(10) NOT NULL default '',
  `department` varchar(4) NOT NULL default '',
  PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=gbk;

解决方案 »

  1.   

    我找到错误了:m.setDepartment("00001");参数长度多了一位
    但这个不是应该向两个表中插入数据吗,为什么major的表数据插进去了,而classes表中的数据没插进去呢?
      

  2.   

    问题已经解决,在<set>标签中加入cascade="save-update"就好了,但还是有点不清楚原因,呵呵
      

  3.   

    你加了cascade="save-update" 就是告诉hibernate 当你保存org.qsm.Major对象时级连保存和他关联的set中的对象