两个pojo,Baby 和Baby File
对应数据库中表baby和babyfile.两个表有外键关联,且babyfile的外键不能为空
配置了个单向一对多,级联关系为save-update
/**
*
* @author weip
* @time 2006-5-10 16:23:19
* @return Set
*
* @hibernate.set lazy="true" cascade="save-update"
* @hibernate.collection-key column="babyId"
* @hibernate.collection-one-to-many class="com.mofile.baby.domain.BabyFile"
*/
public Set getFileSet() {
return fileSet;
}
在修改session中的baby中babyfile,然后提交,结果报错:
。。。。。。。。。。。。
Hibernate: insert into babyfile (sequence, type) values (?, ?)
(JDBCExceptionReporter.java:49) - could not insert: [com.mofile.baby.domain.BabyFile]
java.sql.SQLException: Cannot add or update a child row: a foreign key constraint fails (`baby/babyfile`, CONSTRAINT `babyfile_fk` FOREIGN KEY (`babyid`) REFERENCES `baby` (`id`))
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2847)
原来在插入新的babyfile的时候,没有外键信息,所以违反了外键约束,实际上就是插入空外键出错。
不得已只能在BabyFile加入babyid,做了如下配置就好了
/**
*
* @author weip
* @time 13:56:23 2006-5-14
* @return int
* @hibernate.property not-null="true" column="babyid" size="5"
*/
public int getBabyid() {
return babyid;
}
当然也可以使用getBaby(),考虑到性能方面,所以没有这样作
修改之后的hibernate操作如下:
Hibernate: insert into babyfile (sequence, type, babyid) values (?, ?, ?)
Hibernate: update babyfile set babyId=? where id=?
第二句很多余,推测应该inverse="true",
于是改配置在一对多的关系中加上inverse="true",
修改之后的hibernate操作如下:
Hibernate: insert into babyfile (sequence, type, babyid) values (?, ?, ?)
没有了第二句
结论:
看来有非空外键约束且有save-update或者all-delete-orphanh或者all级联的一对多关系(delete级联没试过不知道如何),必须配置双向关联,且最好inverse="true"
对应数据库中表baby和babyfile.两个表有外键关联,且babyfile的外键不能为空
配置了个单向一对多,级联关系为save-update
/**
*
* @author weip
* @time 2006-5-10 16:23:19
* @return Set
*
* @hibernate.set lazy="true" cascade="save-update"
* @hibernate.collection-key column="babyId"
* @hibernate.collection-one-to-many class="com.mofile.baby.domain.BabyFile"
*/
public Set getFileSet() {
return fileSet;
}
在修改session中的baby中babyfile,然后提交,结果报错:
。。。。。。。。。。。。
Hibernate: insert into babyfile (sequence, type) values (?, ?)
(JDBCExceptionReporter.java:49) - could not insert: [com.mofile.baby.domain.BabyFile]
java.sql.SQLException: Cannot add or update a child row: a foreign key constraint fails (`baby/babyfile`, CONSTRAINT `babyfile_fk` FOREIGN KEY (`babyid`) REFERENCES `baby` (`id`))
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2847)
原来在插入新的babyfile的时候,没有外键信息,所以违反了外键约束,实际上就是插入空外键出错。
不得已只能在BabyFile加入babyid,做了如下配置就好了
/**
*
* @author weip
* @time 13:56:23 2006-5-14
* @return int
* @hibernate.property not-null="true" column="babyid" size="5"
*/
public int getBabyid() {
return babyid;
}
当然也可以使用getBaby(),考虑到性能方面,所以没有这样作
修改之后的hibernate操作如下:
Hibernate: insert into babyfile (sequence, type, babyid) values (?, ?, ?)
Hibernate: update babyfile set babyId=? where id=?
第二句很多余,推测应该inverse="true",
于是改配置在一对多的关系中加上inverse="true",
修改之后的hibernate操作如下:
Hibernate: insert into babyfile (sequence, type, babyid) values (?, ?, ?)
没有了第二句
结论:
看来有非空外键约束且有save-update或者all-delete-orphanh或者all级联的一对多关系(delete级联没试过不知道如何),必须配置双向关联,且最好inverse="true"