栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

保存子数据时传递的分离实体可持久保存

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

保存子数据时传递的分离实体可持久保存

teamService.save(team);

Save方法仅接受临时对象。你可以在这里找到什么是transient object

Transient - an object is transient if it has just been instantiated using the new operator, and it is not associated with a Hibernate Session. It has no persistent representation in the database and no identifier value has been assigned. Transient instances will be destroyed by the garbage collector if the application does not hold a reference anymore. Use the Hibernate Session to make an object persistent (and let Hibernate take care of the SQL statements that need to be executed for this transition).

你正在获取Team对象,并尝试将其持久化到数据库中,但是该对象中包含Account对象,并且该Account对象已分离(意味着该对象的实例已保存到DB中,但该对象不在会话中)。Hibernate正在尝试保存它,因为你已指定:

@oneToMany(cascade = CascadeType.ALL, ....

因此,有几种方法可以解决它:

1)不要使用CascadeType.ALL配置。帐户对象可用于团队数(至少域结构允许),并且更新操作可能会更新所有团队的帐户-这意味着此操作不应在团队更新时启动。如果确实需要使用MERGE / DELETE配置,我将从那里删除级联参数(默认值是不执行级联操作)。但是,如果你确实需要坚持下去,请参阅选项#2

2)使用“ saveOrUpdate()”方法代替“ save()”。“ saveOrUpdate()”方法接受瞬态和分离的对象。但是这种方法的问题在于设计:在保存团队对象时,你真的需要插入/更新帐户吗?我将其分为两个操作,并阻止从团队更新帐户。

希望这可以帮助。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/383696.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号