Hibernate 加载对象后,在更新时,将x实例的标识符从y更改为z并抛出

Hibernate 加载对象后,在更新时,将x实例的标识符从y更改为z并抛出,hibernate,Hibernate,我刚开始冬眠。我正在尝试从数据库读取对象并进行更新。 考虑这个双向映射 STUDENT ---> COURSES One Many hbm.xml的: Student.hbm.xml: <set name="courses" table="COURSES" inverse="false" > <key> <column name="STUDENT_ID" /&g

我刚开始冬眠。我正在尝试从数据库读取对象并进行更新。
考虑这个双向映射

STUDENT    --->   COURSES  
One               Many
hbm.xml的:
Student.hbm.xml:

<set name="courses" table="COURSES" inverse="false" >
            <key>
                <column name="STUDENT_ID" />
            </key>
            <one-to-many  class="Courses" />
</set>     
从数据库加载学生对象后,我尝试将新课程添加到加载学生实例的
然而,我确实得到了这个错误

Exception in thread "main" org.hibernate.HibernateException: 
identifier of an instance of Course was altered from 1 to 0.

关于如何更新该学生实例的任何建议,以便该学生实例现在将分配2门课程。

您如何在HBM中定义标识列?当然,你不需要存钱。只需更新学生。在hbm文件中,设置cascade=课程更新。让我知道这是否有效
        Session session = Utility.getSessionFactory().openSession();
        session.beginTransaction();

        Student student = (Student)session.get(Student.class, 1);

        Courses course = new Courses();
        course.setPriceOpen(new Float("1.2"));
        course.setPriceClose(new Float("1.1"));
        course.setPrceChange(new Float("10.0"));
        course.setDate(new Date());

        course.setStudent(student);        
        student.getCourses().add(course);

        session.save(course);
        session.update(student);

        session.getTransaction().commit();
        session.close();
Exception in thread "main" org.hibernate.HibernateException: 
identifier of an instance of Course was altered from 1 to 0.