Hibernate 一对多 级联更新问题

问题描述

比如说有两个类:Group和Member,一个Group中有多个Member,不考虑一个Member对应多个Group,即假设这是一个一对多关联。并假设这个关联是双向的,则Group类可表述如下:ClassGroup{intid;Stringname;Set<Member>members=newHashSet<Member>();//省略无参构造函数及getter()和setter()方法}Member类如下所示:ClassMember{intid;Stringname;intage;Groupgroup;//省略无参构造函数及getter()和setter()方法}配置文件就是正常的那种配置,比如说cascade="all",inverse="false"lazy="false"等数据库Member表中有个groupid作为外键,参考的是Group表中的id,没错,就是你们想象中的那样。在这种情况下可以实现级联删除,保存,查找,但是就是级联更新的时候出现问题。比如我要更新某一个Group的Member,采用如下所示代码(已简略)publicvoidupdateMembers(intid,Set<Member>new_members){Groupgroup=session.load(Group.class,id);group.setMembers(new_members);session.update(group);}这样的话起不到更新的效果,而是会在Member表中生成一些新的member,之前的member对应的groupid会被置为NULL。哪位大侠能够指点迷津,在此表示感谢。有想法的都可以提一下。

解决方案

解决方案二:
试试把load()改成get()
解决方案三:
楼主改成merge就可以了session.merge(group);
解决方案四:
updateMembers方法中参数new_members里的member有id不为空吗?

时间: 2024-08-08 04:10:31

Hibernate 一对多 级联更新问题的相关文章

关于hibernate 一对多级联查询的问题,生成的sql报语法错误

问题描述 描述:主要是实体一对多的关系,不希望懒加载,需要急加载.配置完后,查询时报sql语法错误,将sql语句拷到mysql中执行,把{}去除,花括号其实就是映射的数据库字段,执行成功.仔细看了一下错误,象是hibernate执行时没有把花括号{}给替换成数据库字段名称,直接带着花括号查询了,当然会报错,为什么会出现这种问题,没有找到原因.有没有朋友知道的?po类:一对多的关系,Jpa配置如下(单向关联) @SuppressWarnings("serial")@Entity@Tabl

有没有什么配置让hibernate自动持久化某个实体属性,而不级联更新这个属性

问题描述 有没有什么配置让hibernate自动持久化某个实体属性,而不级联更新这个属性 比如说,订单表中有客户资料,客户是界面选择的游离的实体对象,保存订单时应该只更新订单的客户ID,而不级联更新客户信息,目前是不用级联就会报org.hibernate.TransientObjectException: object references an unsaved transient instance.用级联就会修改客户数据,这个是业务不能接受的.目前我通过手工持久化客户对象是可以的,但是每个功能

SpringMVC、Hibernate系列之级联对象的json序列化

       最近为了加深学习Spring和Hibernate,就利用Spring4.Hibernate5搭建了SpringMVC与Hibernate整合的平台框架.搭建过程曾遇到了一系列的棘手问题,在这里将相应的解决方案给予记录和分享. 问题描述 利用Jackson序列化Hibernate一对多关联对象时,出现死循环.花费了1天半时间,必须记录下来. 问题分析 很显然是由于Jackson序列化的深度序列化引起的.Hibernate的级联对象难免会存在各式各样的循环嵌套,更甚至自关联的情况.解决

hql 级联update-hql 级联更新问题 报不知道什么错

问题描述 hql 级联更新问题 报不知道什么错 dao层代码: Query query = createQuery("update SfdfUserPublisher set sfdfUser.pwd='123' where id='402881f04f2bfdc9014f2c0029f50000'"); return query.executeUpdate()>0 报错信息: Hibernate: update sfdf_user_publisher cross join se

Hibernate一对多(单向)

[标题]:Hibernate一对多(单向) [时间]:2009-6-12 [摘要]:单向一对多关联只需要在"一方"进行配置即可,"多方"无需额外配置. [关键字]:外键,inverse,Hibernate,Set,一对多,单向,ORM,mapping,关系数据库,映射 [环境]:MyEclipse7 , JDK6,Hibernate3.2,Tomcat6,MySQL 5.1.34-community [作者]:Winty (wintys@gmail.com) htt

Oracle多表级联更新详解

我们在平时的工作中可能遇到过,多表级联更新,我也在网上看到过不少的方法,但是使用这些方法一般都没成功过,所以今天我给大家介绍一种稍微麻烦的方法,有需要的朋友可以参考下   用游标实现,我觉得绝对这种方法比较安全的.--首先定一个游标把需要用到的一些数据存放到游标中: 复制代码 代码如下: declare   CURSOR D_CURSOR_CUS_INFO IS     select t3.id_           as id_,            t3.owe_money_    as

关于hibernate 一对多插入数据的问题

问题描述 关于hibernate 一对多插入数据的问题 现在出现了一个问题, 主表和副表通过1对多的关系关联配置,所有的配置都完成了. 在做关联处理时,副表的查询是成功的,但是在对副表进行插入数据的处理时, 数据不能被插入,从打印的日志来看,副表的insert语句都没有被执行, 请问有没有人遇到过这种问题?是什么原因造成的?谢谢 解决方案 Hibernate一对多增删改查 解决方案二: 估计是hibernate配置时cascade的问题,如果是注解的看http://blog.csdn.net/z

hibernate一对多查询问题

问题描述 hibernate一对多查询问题 我想用hibernate查询得到的list集合转化为json后是这种效果[{"分类id":"1","商品":[{"分类id":"1","name":".商品1"},{"分类id":"1","name":"商品2"}]},{"分类id&q

hibernate一对多关系中的外外键值无法获取

问题描述 hibernate一对多关系中的外外键值无法获取 !表中的外键cid值没有生成](http://img.ask.csdn.net/upload/201508/05/1438784830_640743.png) 解决方案 你其实可以不用写,可以自动生成相应的映射关系,这些主外键会自动帮你生成,至于怎么自动生成,你可以百度下,到处是的 解决方案二: 你其实可以不用写,可以自动生成相应的映射关系,这些主外键会自动帮你生成,至于怎么自动生成,你可以百度下,到处是的 解决方案三: http://