Hibernate中的级联一对多关系
2006-05-14 18:33
309 查看
两个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"
相关文章推荐
- Hibernate学习---第十六节:cascade(级联)和inverse关系详解
- hibernate中的级联关系小结
- Hibernate之级联关系配置的作用
- Hibernate 级联关系说明 - 关于cascade和inverse的用法
- jackson json数据过滤,用于hibernate的懒加载对象级联关系的json解析
- hibernate级联关系 -----一对一
- (7) hibernate之级联cascade和关系维持inverse
- Hibernate 级联关系说明 - 关于cascade和inverse的用法
- Hibernate (cascade)级联关系
- Hibernate(3)关系映射之一对多级联
- 从hibernate源代码角度解析, 关系维护 ,dirty检查 ,脏数据检查.. 级联区别 cascade区别.
- Hibernate第三天——表间关系与级联操作
- Hibernate学习_014_级联关系中的CRUD操作
- Hibernate Annotation关系映射, 级联cascade属性
- hibernate之xml映射文件关系维护,懒加载,级联
- hibernate之xml映射文件关系维护,懒加载,级联
- 在hibernate 中比 SimplePropertyPreFilter 还要好用的过滤类 ComplexPropertyPreFilter(级联过滤,关系映射过滤类,复杂的属性预过滤器)!!!!
- Hibernate中使用的集合类型,级联和关系维护
- Hibernate<五> 级联和关系维护
- hibernate 一对多(级联关系)