永发信息网

hibernate 执行 一对多操作 主表 insert 后,次表竟然做update操作,哪位高人指点下啊 纠集了1天了。。

答案:4  悬赏:60  手机版
解决时间 2021-04-04 14:45
  • 提问者网友:我没有何以琛的痴心不悔
  • 2021-04-03 22:19
我有两张表project和projectAffix:关系为 项目(project)对projectAffix(附件)是一对多关系

Action 中做的操作:
ProjectAffix affix = new ProjectAffix();//由于是附件,用的是Struts2的附件传值 页面一个name对应着Action中的3个值OGNL 我不知道怎么来封装,所以进行Add操作时,new了个瞬时对象
Set projectAffix = new HashSet();//道理一样,对方往单方里面set的只能是Set 类型ProjectAffix;同上
affix.setFileName(path+"\\"+fileFileName);//附件上传文件所在的全路径
projectAffix.add(affix);//Add一个对象到Set集合中
affix.setProject(project);//set 对方附件对应的Project
project.setProjectAffix(projectAffix);//将projectAffix赋值给一方project
projectService.add(project);进行Add操作

配置文件为:









我在页面新增 Project 时,选择插入第一条数据时,后台输出为:
Hibernate: insert into project (customer_id, proName, proContent, state) values (?, ?, ?, ?)
Hibernate: insert into projectAffix (project_id, fileName) values (?, ?)
当插入第二条时:
Hibernate: insert into project (customer_id, proName, proContent, state) values (?, ?, ?, ?)
Hibernate: update projectAffix set project_id=?, fileName=? where proAffix_id=?
当我删除掉project时可以正常的删除掉projectAffix 表中的记录,做级联删除;更新也可以正常执行;就是当insert into project 表,然后hibernate自动的执行对projectAffix表进行更行,不知道什么原因,求高人指点啊。。
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-04-03 23:24
你是删除的时候做的修改还是插入的时候?
删除的时候hibernate一般先把关联全部置成null
然后再由用一条deletel删除掉
插入的时候也一样,先不控制管理关系,全部设置成null,在调用update修改。
不知道满意不?给个最佳吧
全部回答
  • 1楼网友:低音帝王
  • 2021-04-04 02:22
把 cascade="all" 这个属性去掉
  • 2楼网友:第四晚心情
  • 2021-04-04 00:58
update的关键在ID,请检查你的次表ID是否已存在!
  • 3楼网友:鱼忧
  • 2021-04-04 00:09
配置没有错,可能是你代码的问题。 再看看别人怎么说的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯