hibernate 一对多 级联 保存修改 删除
一对多,一端设置:
<set name="TWorkorderHistories" inverse="true" cascade="all">
一)保存级联
问题:
一方主键数据库中没有,先保存多方时,回报引用暂时态对象错误,
分析:
先不关联多方地保存一方,
解决:
假设一方A,多方B
1)B.setA(A);
2)A.getSetB().add(B);
3)session.save(A);
或:
// 插入记录
session.saveOrUpdate(workorder);
tr.commit();
session.close(); session = hibernateDao.getHSession();
tr = session.beginTransaction();
// 添加工单历史
TWorkorderHistory tWorkorderHistory = new TWorkorderHistory(workorder,
pureUser, 1L, new Timestamp(new Date().getTime()), Short
.parseShort("0")); session.saveOrUpdate(tWorkorderHistory);
workorder.getTWorkorderHistories().add(tWorkorderHistory); // 插入记录
tr.commit();
session.close();
保存级联
二)修改级联
问题一:
org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
解决:
参考:http://blog.163.com/chinagujing@yeah/blog/static/170937439201092405558777/
http://littie1987.iteye.com/blog/1039082
@Override
public void update(TWorkorderInfo workorder,User pureUser, String note, Short status)
throws DataAccessException { workorder.setStatus(status);
workorder.setUpdated(new Timestamp(new Date().getTime())); //开启事务
Session session = hibernateDao.getHSession();
Transaction tr = session.beginTransaction(); TWorkorderHistory tWorkorderHistory = new TWorkorderHistory();
tWorkorderHistory.setTWorkorderInfo(workorder);
tWorkorderHistory.setCreated(new Timestamp(new Date().getTime()));
tWorkorderHistory.setOptType(status);
tWorkorderHistory.setNote(note);
tWorkorderHistory.setPureUser(pureUser);
tWorkorderHistory.setWorkflowId(1L); session.saveOrUpdate(tWorkorderHistory);
workorder.getTWorkorderHistories().add(tWorkorderHistory); session.merge(workorder);
tr.commit();
session.close();
}
更新级联
问题二:
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.bonc.pure.domain.User
分析:
前台忘记传这个User了,一共有两个这样的User对象,后台只set了一个,前台传的是workorder.pureUserByModifier.userName,
struts给new的这个User对象只有userName一个属性,没有userId,而主键关联是需要通过userId的
解决:
<s:hidden name="workorder.pureUserByModifier.userId"></s:hidden>
二) 删除级联
问题:
org.hibernate.HibernateException: illegally attempted to associate a proxy with two open Sessions
解决:
参考:http://www.itzhai.com/hibernate-one-to-many-association-mapping-configuration-and-the-cascade-delete-problem.html
Session session = hibernateDao.getHSession();
session.beginTransaction();
TWorkorderInfo workorder = (TWorkorderInfo) session.load(clazz, workorderCode);
session.delete(workorder);
session.beginTransaction().commit();
删除级联
hibernate 一对多 级联 保存修改 删除的更多相关文章
- Hibernate入门(八)级联保存或更新(含问题在末尾,求大佬指点..)
级联保存或更新CASCADE 级联保存或更新: 作用就是:保存一方的数据的时候,会把关联的对象也同时保存. 级联保存或更新的配置: 属性名:cascade 属性值: 1.none:所有情况下均不进行关 ...
- Hibernate一对多关联关系保存时的探究
在以前使用hibernate时,经常对保存存在关联关系的对象时,不确定是否能保存成功. 因此,特意对一对多关系的2个对象进行实践. 一.pojo类和配置文件的准备 这里有一点提前 ...
- spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
spring boot 使用jpa在pom.xml在上文中已经介绍过.在这里直接介绍各个类文件如何编写: 代码结构: domain(存放实体类文件): repository(存放数据库操作文件,相当于 ...
- springmvc4+hibernate4+spring4注解一对多级联保存
package com.h3c.zgc.user.entity; import java.util.HashSet; import java.util.Set; import javax.persis ...
- (原创)Hibernate 使用过程中(尤其是多对多关联中的级联保存和级联删除)的注意事项(基于项目的总结)
一.先上知识点: 1.hibernate多对多关联关系中最重要的参数是(基于配置文件xxx.hbm.xml文件形式): 1):inverse属性,如果设置inverse=“true”就代表让对方参与维 ...
- Hibernate一对多操作
--------------------siwuxie095 Hibernate 一对多操作 以客户和联系人为例,客户是一,联系人是多 即 一个客户里面有多个联系人,一个联系人只能属于一个客户 注意: ...
- Hibernate 一对多
表与表之间关系回顾(重点) 1 一对多 (1)分类和商品关系,一个分类里面有多个商品,一个商品只能属于一个分类 (2)客户和联系人是一对多关系 - 客户:与公司有业务往来,百度.新浪.360 - 联系 ...
- Hibernate中表与表之间的关联一对多,级联保存和级联删除
1:Hibernate的一对多操作(重点) 一对多映射配置 第一步:创建两个实体类:客户和联系人(例)以客户为一,联系人为多: package com.yinfu.entity; public cla ...
- 再谈Hibernate级联删除——JPA下的Hibernate实现一对多级联删除CascadeType.DELETE_ORPHAN
声明: 1.本文系原创,非抄袭或转载过来的. 2.本文论点都亲手做过实验论证. 3.本文所讲的Hibernate配置都基于注解的方式,hbm语法未提供. 非常多人对持久层概念搞不清JPA.Hibern ...
随机推荐
- 关于embedding-深度学习基本操作 【Word2vec, Item2vec,graph embedding】
https://zhuanlan.zhihu.com/p/26306795 https://arxiv.org/pdf/1411.2738.pdf https://zhuanlan.zhihu.com ...
- 2016.8.19 在dialog上增加一个button出现错误:failed to execute setAttribute on Element...
目标:想要在dialog上多加一个button. 语法来自: http://api.jqueryui.com/dialog/#option-buttons 可见新增在dialog上的button要 ...
- tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样。
tts和字符集的关系--要求源和目的端的数据库字符集必须一样,国家字符集必须一样. imp sys/as TRANSPORT_TABLESPACE=Y datafiles= C:\oracle\pro ...
- SQLite基本(实例FileOrganizer2013.5.12)
工具用 SQLite Dev 数据类型: 1.NULL:空值. 2.INTEGER:带符号的整型,具体取决有存入数字的范围大小. 3.REAL:浮点数字,存储为8-byte IEEE浮点数. 4. ...
- java中的值传递和引用传递区别
值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响 ...
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
code&monkey Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...
- 【转载】ASP.Net请求处理机制初步探索之旅 - Part 3 管道
开篇:上一篇我们了解了一个ASP.Net页面请求的核心处理入口,它经历了三个重要的入口,分别是:ISAPIRuntime.ProcessRequest().HttpRuntime.ProcessReq ...
- TI C66x DSP 系统events及其应用 - 5.9(IST重定位)
RESET中断的获取包必须位于0地址处,然后其它中断的获取包能够位于不论什么256字(1k字节边界)对齐的程序空间.IST的位置由ISTP寄存器中的ISTB字段决定. IST又一次定位举例: 1,将I ...
- EAI G4-lidar ROS配置
(1)使用命令创建 ydlidar_ws 工作空间,并将 G4 资料包内的 ROS 驱动包 ydlidar 下载到ydlidar_ws/src 目录下,切换到 ydlidar_ws 工作空间下并重新进 ...
- Hibernate学习一----------Hibernate初实现
© 版权声明:本文为博主原创文章,转载请注明出处 ORM(Object/Relationship Mapping):对象/关系映射 - 利用面向对象思想编写的数据库应用程序最终都是把对象信息保存在关系 ...