Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance -

本文解决了一个关于Hibernate框架中关联对象未保存导致的TransientObjectException异常问题。通过检查多对一关联关系,并确保在保存或更新前正确设置关联对象值,避免了此异常的发生。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Caused by: org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.cat.po.proReport.Enterprise
 at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:242)
 at org.hibernate.type.EntityType.getIdentifier(EntityType.java:430)
 at org.hibernate.type.ManyToOneType.isDirty(ManyToOneType.java:265)
 at org.hibernate.type.TypeFactory.findDirty(TypeFactory.java:619)
 at org.hibernate.persister.entity.AbstractEntityPersister.findDirty(AbstractEntityPersister.java:3151)
 at org.hibernate.event.def.DefaultFlushEntityEventListener.dirtyCheck(DefaultFlushEntityEventListener.java:501)
 at org.hibernate.event.def.DefaultFlushEntityEventListener.isUpdateNecessary(DefaultFlushEntityEventListener.java:227)
 at org.hibernate.event.def.DefaultFlushEntityEventListener.onFlushEntity(DefaultFlushEntityEventListener.java:150)
 at org.hibernate.event.def.AbstractFlushingEventListener.flushEntities(AbstractFlushingEventListener.java:219)
 at org.hibernate.event.def.AbstractFlushingEventListener.flushEverythingToExecutions(AbstractFlushingEventListener.java:99)
 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:49)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
 at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
 at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
 at org.springframework.orm.hibernate3.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:655)
 ... 76 more

 

原因是:代码中关联的对象没有set值进去。
查看代码,发现是enterPriseStrength和enterprise为多对一关联,
代码直接enterPriseStrengthDao.saveOrUpdate(enterPriseStrength);//保存或更新
保存或更新前必须将enterprise的值set进去:enterPriseStrength.setEnterprise(enterprise)
如果是空值,则也必须set:enterPriseStrength.setEnterprise(null);

set值之后保存成功~~记住,保存一个对象的时候,所有关联的对象都必须set值,否则报错。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值