两个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"
分享到:
相关推荐
Hibernate级联操作一对多demo Hibernate级联操作一对多demo Hibernate级联操作一对多demo
hibernate3.2级联关系自身一对多双向关联,适合初学者熟悉hibernate框架。
hibernate 注解生成表 JPA注解1、@Entity(name="EntityName")必须,name为可选,对应数据库中一的个表2、@Table(name="",catalog="",schema="")可选,通常和@Entity配合使用,只能标注在实体的class定义处,表示实体...
Hibernate 一对多、多对一、级联、加载、反转
hibernate 级联(cascade和inverse)一对多,Jar包,数据库建表语句都好了,只要修改一下,数据库配置文件,就可以使用了,使用junit进行测试。
JavaProject实现hibernate3.2的级联关系,适合初学者熟悉各种级联关系。一对多,一朵一,多对多。
Hibernate 一对多关联映射的测试,主要使用部门与员工的级联关系进行添加测试.
hibernate 的基础 常用的主键生成策略 持久化对象的三种状态 一级缓存的常用操作(save/update/saveOrUpdate/delete)一对多关联映射 级联操作
详细讲解了hibernate 的多对一xml配置以及curd操作,讲解了级联操作,适合初学者学习
本人在厦门邦初培训时候用的ppt 快速入门文档 内容: 建立一对多的关联关系域模型 建立一对多的参照关系的模型 映射一对多关联关系 通过hibernateAPI级联操作关联对象 其它关系的映射:一对一,多对多
深入理解hibernate many-to-one(多对一)及 cascade(级联).
10_传智播客JPA详解_JPA中的一对多双向关联与级联操作.rar
hibernate 关系类型 一对多 多对一各种关系都有 还有就是级联 欢迎
测试实现的功能: 一对一新增 一对多新增 多对多新增 多对多删除 乐观锁 一级缓存,二级缓存,读写并发 query 查询一级缓存 Criteria--基于条件查询 dao 实现测试
21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...
21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...
21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...
案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有... 一对一、多对一、一对多、多对多等几种情况。
21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 ...
21.2. 双向的一对多关系(Bidirectional one-to-many) 21.3. 级联生命周期(Cascading lifecycle) 21.4. 级联与未保存值(Cascades and unsaved-value) 21.5. 结论 22. 示例:Weblog 应用程序 22.1. 持久化类 22.2....