弱弱问句,刚学hibernate,很迷惑。比如两张表:class表(classId,className),student表(studentId,name,age,num,classId),其中student.classId是外键。
我想通过某个班向student表插入新的一行数据,即比如向一班插入一个新学生的数据,怎么写代码呢?用hibernate不会了。
我想了一个方法不知道对不对,是这样的,我通过classId查询到一个new Class,然后因为class.getStudent.add(student)类似的方法将student的一个实例插入到new Class类中,然后执行save(class)。但是报错,说student session关闭之类的。看来这个想法错了。
求大人给予正解。
谢谢。

解决方案 »

  1.   

    检查下映射文件是否正确,查看数据库是否需要进行事务管理。提供两个映射文件供您参考。两者主要是一对多,多对一的关系,以下映射文件支持两次任意放下进行加载。
    Student:<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
    <class name="org.wiki.hibernate.Student" table="t_student">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name"/>
    <many-to-one name="classid" column="classid"/>
    </class>
    </hibernate-mapping>
    Class:<?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping package="org.wiki.hibernate">
    <class name="Class" table="t_class">
    <id name="id">
    <generator class="native"/>
    </id>
    <property name="name"/>
    <set name="students" inverse="true" cascade="all">
    <key column="classid"/>
    <one-to-many class="Student"/>
    </set>
    </class>
    </hibernate-mapping>
      

  2.   

          
             class ( one to many ) student 关系
        
            session.beginTransaction();
             Class=(Class) session.load(Class.class, classId);
             student.setClass(Class);
             student.set...
              ......
             session.save(student)
             session.getTransaction().commit();
             session.close()