SORRY,我的贴了两遍,贴重了!我这就试下加个事务!

解决方案 »

  1.   

    Hibernate: update student set stu_name=?, stu_pwd=? where stu_id=?
    Hibernate: update course set cou_name=?, cou_dis=? where cou_id=?
    Hibernate: insert into course_student_table (stu_id, cou_id) values (?, ?)
    这是插入的代码,没有问题,Hibernate: update student set stu_name=?, stu_pwd=? where stu_id=?
    Hibernate: update course set cou_name=?, cou_dis=? where cou_id=?
    这就是更新的代码:
    没有对course_student_table表进行操作.
    请高人来指点一两吧!
      

  2.   

    inverse映射参数究竟表示什么呢?对于你和对于Java来说,一个双向关联仅仅是在两端简单的设置引用。然而仅仅这样 Hibernate并没有足够的信息去正确的产生INSERT和UPDATE语句(以避免违反数据库约束), 所以Hibernate需要一些帮助来正确的处理双向关联。把关联的一端设置为inverse将告诉Hibernate忽略关联的 这一端,把这端看成是另外一端的一个镜子(mirror)。这就是Hibernate所需的信息,Hibernate用它来处理如何把把 一个数据导航模型映射到关系数据库表定义。 
    你仅仅需要记住下面这个直观的规则:所有的双向关联需要有一端被设置为inverse。在一个一对多(one-to-many)关联中 它必须是代表多(many)的那端。而在多对多(many-to-many)关联中,你可以任意选取一端,两端之间并没有差别。
      

  3.   

    又仔细看了一下文档,我前面发错了。Hibernate 的文档11.11. 传播性持久化(transitive persistence)你可以使用cascade="all"来指定全部操作都顺着关联关系级联(cascaded)。 默认值是cascade="none",即任何操作都不会被级联(cascaded)。 注意有一个特殊的级联风格(cascade style) delete-orphan,只应用于one-to-many关联,表明delete()操作 应该被应用于所有从关联中删除的对象。 建议: 通常在<many-to-one>或<many-to-many>关系中应用级联(cascade)没什么意义。 级联(cascade)通常在 <one-to-one>和<one-to-many>关系中比较有用。 如果子对象的寿命限定在父亲对象的寿命之内,可通过指定cascade="all,delete-orphan"将其变为自动生命周期管理的对象(lifecycle object)。 其他情况,你可根本不需要级联(cascade)。但是如果你认为你会经常在某个事务中同时用到父对象与子对象,并且你希望少打点儿字,可以考虑使用cascade="persist,merge,save-update"。 可以使用cascade="all"将一个关联关系(无论是对值对象的关联,或者对一个集合的关联)标记为父/子关系的关联。 这样对父对象进行save/update/delete操作就会导致子对象也进行save/update/delete操作。 
    楼主测试一下,把cascade的数据修改一下看看,如何?
      

  4.   

    <set name="courses" table="course_student_table" cascade="all,delete-orphan" inverse="false" lazy="false" >
            <key column="stu_id"></key>
            <many-to-many class="org.eimhe.db.Course" column="cou_id"></many-to-many>
            </set>
    <set name="students" table="course_student_table" cascade="save-update" lazy="false">
            <key column="cou_id"></key>
            <many-to-many class="org.eimhe.db.Student" column="stu_id"></many-to-many>
            </set> cascade="all,delete-orphan" 改为也不行:
    Hibernate: update student set stu_name=?, stu_pwd=? where stu_id=?
    Hibernate: update course set cou_name=?, cou_dis=? where cou_id=?
    Hibernate: update student set stu_name=?, stu_pwd=? where stu_id=?
    Hibernate: update course set cou_name=?, cou_dis=? where cou_id=?
    Hibernate: update student set stu_name=?, stu_pwd=? where stu_id=?
    Hibernate: update student set stu_name=?, stu_pwd=? where stu_id=?
    双改两遍也改不了
    高人能给个具体怎么配置这两个SET的例子么?
      

  5.   

    <hibernate-mapping package="hbn.many2many">
    <class name="Student" table="STUDENTS">
    <id name="sid" unsaved-value="null">
    <generator class="hilo">
      <param name="table">pk_table</param>
      <param name="column">id_value</param>
      </generator>
    </id>
    <property name="name"/>
    <property name="sex"/>
    <property name="birthday"/>
    <property name="edu"/>
    <property name="cardno" unique="true" not-null="true"/>
    <set name="courses" table="ENROLLMENTS" inverse="true" cascade="save-update">
    <key column="sid"/>
    <many-to-many class="Course" column="cid"></many-to-many>
    </set>
    </class>
    <class name="Course" table="COURSES">
    <id name="cid" unsaved-value="null">
     <generator class="hilo">
      <param name="table">pk_table</param>
      <param name="column">id_value</param>
      </generator>
    </id>
    <property name="name" unique="true" not-null="true"></property>
    <property name="desc"></property>
    <set name="students" table="ENROLLMENTS" cascade="save-update">
    <key column="cid"></key>
    <many-to-many class="Student" column="sid"></many-to-many>
    </set>
    </class>
    </hibernate-mapping>
      

  6.   

    谢谢以下两位的回复.
    wangzhiqing(妄想分别执着) tangshuo() 不过,问题还是没有解决.谢谢大家的关心,我打算放弃这多对多的例子.