inverse="true"表示这个关系是由"多"端维护的

解决方案 »

  1.   

    inverse="true"表示这个关系是由"多"端维护的
    我去查下,不懂.
    我把inverse改false,就成这样了:
    Hibernate: insert into SCHOOL (NAME, ID) values (?, ?)
    Hibernate: update STUDENT set NAME=?, SCHOOL_ID=? where ID=?
    Hibernate: update STUDENT set SCHOOL_ID=? where ID=?
      

  2.   

    <set 
    name="students"
    cascade="all-delete-orphan" 
    inverse="true"
            >
    cascade="all-delete-orphan" 
    级联改成save-update不知道行不行。
      

  3.   

    不行啊.
    all-delete-orphan它有save-update的功能阿
      

  4.   

    student.setSchool(school);
    加上去看看
      

  5.   

    哎!郁闷阿!
    AWUSOFT(),试出来了吗?
      

  6.   

    <hibernate-mapping>
        <class name="FFF.School" table="SCHOOL" schema="SCOTT">
            <id name="id" type="java.lang.Long">
                <column name="ID" precision="22" scale="0" />
                <generator class="assigned">         
                </generator>
            </id>
            <property name="sname" type="java.lang.String">
                <column name="SNAME" length="20" />
            </property>
            <set name="students" inverse="false" cascade="save-update">
                <key>
                    <column name="SID" precision="22" scale="0" not-null="true"/>
                </key>
                <one-to-many class="FFF.Student" />
            </set>
        </class>
    </hibernate-mapping><hibernate-mapping>
        <class name="FFF.Student" table="STUDENT" schema="SCOTT">
            <id name="id" type="java.lang.Long">
                <column name="ID" precision="22" scale="0" />
                   <generator class="assigned">
                </generator>
            </id>
            <many-to-one name="school" class="FFF.School" fetch="select">
                <column name="SID" precision="22" scale="0" not-null="true"/>
            </many-to-one>
            <property name="stuname" type="java.lang.String">
                <column name="STUNAME" length="20" />
            </property>
        </class>
    </hibernate-mapping>
    数据库表结构(Oracle):
    create table school(id int primary key,sname varchar2(20));
    create table student(id int primary key,sid int references school(id),stuname varchar2(20));测试代码:School school = new School();
    school.setId(111L);
    school.setSname("as");
    Student student = new Student();
    student.setId(222L);
    student.setStuname("321");
    student.setSchool(school);
    school.getStudents().add(student);
                               session.save(school);
    测试结果通过.
      

  7.   

    由些可见你的问题应该是
    set 
    name="students"
    cascade="all-delete-orphan" 
    inverse="true"
            >改成------------>set 
    name="students"
    cascade="save-update" 
    inverse="false"
            >
      

  8.   

    AWUSOFT() ,我的怎么还不行啊!
    你有qq吗?我把我的传给你,好吗?
      

  9.   

    student.setSchool(school);
    试试看,因为你只是构造一个student时传了进去,但是没有让HIBERNATE知道它的关联变化
      

  10.   

    5555555555555555555555555555
    Hibernate: insert into SCHOOL (NAME, ID) values (?, ?)
    Hibernate: update STUDENT set NAME=?, SCHOOL_ID=? where ID=?
    Hibernate: update STUDENT set SCHOOL_ID=? where ID=?
    本来第二条记录应该是一句插入语句阿,可为什么是update语句呢?是不是系统认为student实体已经被持久化了?不理解中...
      

  11.   

    是hibernate包的版本问题吗?
    楼主到怎样解决的啊?
      

  12.   

    搞定了,
    <id name="id" column="id" type="integer" unsaved-value="0">一定要设置 unsaved-value。
      

  13.   

    这个问题已经解决了,麻烦大家了,
    具体问题是我在javabean里把id的类型设为long(基本类型)
    应该是Long(或者其他封装型的数据类型).大家也要注意啊