object references an unsaved transient instance - save the transient instance before flushing-程序员宅基地

技术标签: hibernate  



hibernate报object references an unsaved transient instance - save the transient instance before flushing如此错误解析:

1.如果想级联保存对象,但是没有配置级联保存就会报如此错误:

比如账户和用户两张表,在保存账户的时候级联保存用户,两个正确配置如下:

账户表中关联用户的配置

@OneToOne(optional=false,fetch=FetchType.LAZY)    @JoinColumn(name="sem_user_id", unique=true, nullable=false, updatable=false)@Cascade(value=org.hibernate.annotations.CascadeType.ALL)@Fetch(FetchMode.SELECT)public User getUser() { return user;}public void setUser(User user) { this.user = user;}

用户表中关联的账户表的配置

@OneToOne(mappedBy = "user")public Account getAccount() { return account;}public void setAccount(Account account) { this.account = account;}

错误配置如下:

账户表中关联用户的配置

@OneToOne(optional=false,fetch=FetchType.LAZY)    @JoinColumn(name="sem_user_id", unique=true, nullable=false, updatable=false)@Fetch(FetchMode.SELECT)public User getUser() { return user;}public void setUser(User user) { this.user = user;}

用户表中关联的账户表的配置

@OneToOne(mappedBy = "user")public Account getAccount() { return account;}public void setAccount(Account account) { this.account = account;}

这样就会报object references an unsaved transient instance - save the transient instance before flushing: com.future.feoa.entity.User这样的错误!

2.是我正式阐述的,今天同事遇到object references an unsaved transient instance - save the transient instance before flushing这个错误让我看,因为他有级联保存,我一直以为是级联保存的时候出错了,折腾了几个小时,最后经过反复dug调试发现不是级联保存的错误,是保存的级联对象的关系属性的错误。具体如下:

如果不是级联保存,是保存单个对象,而这个有关联的对象,你的页面可以对这个关联对象不选值,就是给关联对象不选id值,这样的话struts会把你的关联对象重新new一个空对象赋给此对象,而这个空对象在数据库肯定是没有的,所以在保存该对象的时候就会报关联的没选值的对象为瞬时态的错误。

怎么解决了?

例如:还是用户和部门两个实体。保存用户的时候页面没有给用户所在部门选值

这样就得在hibernate保存之前做一下判断将所属部门置为null值(注意用户实体配置必须配置所属部门可为null)如下:

if(null!=user.getDept()&&null==user.getDept().getId()){

user.setDept(null);

}

如此处理就ok了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yztezhl/article/details/11237809

智能推荐

linux prel安装_【perl】Linux中perl模块的安装-程序员宅基地

文章浏览阅读233次。(以安装DBI和DBD::mysql为例)方法一:cpan(这个是最简单的方法,首次使用时请按照方法二安装CPAN(v2.05)这个模块)>cpan>installDBI#使用该命令,DBI安装成功,但是DBD-mysql没有安装成功,报错如下methods to determineprerequisitesFailed during this command:CAPTTOFU/DBD..._[dbd-mysql-4.023] 错误 1

oracle 操作树大全,在Oracle中的树形操作-程序员宅基地

文章浏览阅读516次。在Oracle中的树形操作在Oracle中的树形操作1.取子节点及路径(正树):select t.id ,t.code, t.name ,t.pid,SYS_CONNECT_BY_PATH(t.id,'.')||'.' as IdPathfrom tas_catalog t--where id!=110start with id=110connect by pid = prior idorder..._oracle树轴

Python实现天猫精灵OAuth2.0和语音技能配置_天猫精灵 python-程序员宅基地

文章浏览阅读2.7k次,点赞5次,收藏16次。之前用tornado实现tcp server与硬件的client的连接,以便下发指令。基于django/tornado与wifi模块,lora设备的TCP/UDP即时通讯现在考虑到天猫精灵可以语音接入。也就用tornado来实现天猫精灵的OAuth2.0.发了两天空闲的时间去摸索,终于实现成功了。我的参考文章。Java实现Aligenie天猫精灵OAuth2.0认证授权流程重要的还是..._天猫精灵 python

常见开源分布式存储系统_开源分布式文件存储系统应用举例和产品-程序员宅基地

文章浏览阅读4.7w次,点赞7次,收藏49次。系统整体对比对比说明/文件系统TFSFastDFSMogileFSMooseFSGlusterFSCeph开发语言C++CPerlCCC++开源协议GPL V2GPL _开源分布式文件存储系统应用举例和产品

移动端点击事件300ms延迟问题--safari浏览器_safari移动端下拉调分页接口延迟的问题-程序员宅基地

文章浏览阅读384次。1、禁用缩放<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>这一方案在 safari 上并不起作用,而且大大降低了移动端页面的可用性和可访问性。2、使用指针事件 (IE10+)a, button{ -ms-touch-actio..._safari移动端下拉调分页接口延迟的问题

随便推点

PostgreSQL 时区问题_postgreql to_char 时区-程序员宅基地

文章浏览阅读3.7k次,点赞3次,收藏2次。PostgreSQL时区SQL 标准通过"+"或者"-"是否存在来区分timestamp without time zone和timestamp with time zone文本。因此,TIMESTAMP '2021-03-06 18:02:00'是一个timestamp without time zone,而TIMESTAMP '2021-03-06 18:02:00 +08'是一个timestamp with time zone。+08:表示 时区与全球统一时间 ..._postgreql to_char 时区

MyBatis Plus插入后返回ID主键(自增)_mybatisplus新增返回主键-程序员宅基地

文章浏览阅读1.3w次。在MyBatisPlus中添加注解信息即可//实体类(此处需要添加对应的MyBatisPlus主键信息)public class Notice{ private int noticeId; private String release_date; private String content;}//方案一:自定义SQL(自增主键) @Insert("insert into notice(release_date,content)values(#{releaseDate},#_mybatisplus新增返回主键

安卓开发报错:java.net.UnknownServiceException: CLEARTEXT communication to 192.xxx.x.x not permitt_http failed: java.net.unknownserviceexception: cle-程序员宅基地

文章浏览阅读132次。因为 Android P 是默认禁止访问http的API的 所以想要跳过https的限制需要在。在Android O 升 P (8.0升9.0)的时候,会报以下异常。的Application中添加以下内容。_http failed: java.net.unknownserviceexception: cleartext communication to 19

PTE学习作业_基础题目之日志分析-程序员宅基地

文章浏览阅读1.5k次。##被攻击者服务器为Linux:加粗样式1.基础题目之SQL注入所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通过SQL注入漏洞读取/tmp/360/key文件,答案就在文件中。通过简单的测试,看到了 系统过滤了空格咱为了省事直接sqlmap用起来,先去tamper里面找找哪个空格好使答案出来了复制路径C:\Users\Admin\AppData\Local\sqlmap\output\172.16.12.1_基础题目之日志分析

固定IP和自动IP切换bat脚本_固定ip脚本-程序员宅基地

文章浏览阅读2.5w次,点赞11次,收藏28次。最近在忙项目,博客更新基本断了,gis方面学习暂无太大进展。最近公司换位置,重新分配ip,之前都没用有线,现在遇到问题是公司固定ip,家里自动分配ip,来回修改很麻烦。查了网上的有不少方案,但是试了有点小问题,后来查查才知道什么原因,直接上代码细说,把下面复制到txt文件中,并修改txt后缀为bat即可。固定ip:@echo offclscolor 0AEcho *****..._固定ip脚本

python之SQL视图_python sql创建视图-程序员宅基地

文章浏览阅读574次。python之SQL视图1 视图(View)定义2 作用3 创建视图4 删除视图5 视图注意1 视图(View)定义从若干基本表和(或)其它视图构造出来(select 出来)的表(虚表)。在创建一个视图时,只存放视图的定义,即存放动态检索数据的查询语句,不存放视图对应的数据在用户使用视图时才去求相应的数据视图被称为虚表2 作用通过选择特定数据的访问,可以给用户授予特定部分的访问权限,而不是整个表的权限;使得复杂的查询变得简单;在编写查询后,可以方便的重用它而不必知道它的基本查询细节;_python sql创建视图

推荐文章

热门文章

相关标签