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=?
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实体已经被持久化了?不理解中...
我去查下,不懂.
我把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=?
name="students"
cascade="all-delete-orphan"
inverse="true"
>
cascade="all-delete-orphan"
级联改成save-update不知道行不行。
all-delete-orphan它有save-update的功能阿
加上去看看
AWUSOFT(),试出来了吗?
<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);
测试结果通过.
set
name="students"
cascade="all-delete-orphan"
inverse="true"
>改成------------>set
name="students"
cascade="save-update"
inverse="false"
>
你有qq吗?我把我的传给你,好吗?
试试看,因为你只是构造一个student时传了进去,但是没有让HIBERNATE知道它的关联变化
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实体已经被持久化了?不理解中...
楼主到怎样解决的啊?
<id name="id" column="id" type="integer" unsaved-value="0">一定要设置 unsaved-value。
具体问题是我在javabean里把id的类型设为long(基本类型)
应该是Long(或者其他封装型的数据类型).大家也要注意啊