qianlei0007 2008-09-10 10:22
浏览 205
已采纳

hibernate3 的多对一的外键更新问题!

[code="ruby"]
public class SysModel extends BaseEntity {

@ManyToOne(cascade = { CascadeType.MERGE })
@JoinColumn(name = "PARENT_ID")
private SysModel sysModel;

.......

}

[/code]
映射文件大概如此, 有一个自关联字段。

在操作的时候,遇到一个问题,当此字段为 null 的时候,我可以保存,但是不能更新,报错:

Hibernate: update SYS_MODEL set DELETE_FLAG=?, MODEL_NAME=?, ORDER_ID=?, remark=?, PARENT_ID=?, url=?, version=? where id=?
2008-09-10 09:55:31,906 ERROR [org.hibernate.event.def.AbstractFlushingEventListener] -
org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.sctt.system.sys.model.bean.SysModel
at org.hibernate.engine.ForeignKeys.getEntityIdentifierIfNotUnsaved(ForeignKeys.java:219)
at org.hibernate.type.EntityType.getIdentifier(EntityType.java:397)
at org.hibernate.type.ManyToOneType.nullSafeSet(ManyToOneType.java:78)

也就是说,PARENT_ID=? 为 NULL 。我基本知道错误原因。
但是,我的本条数据,确实 没有外键呀, sysModel = null;
如何才能更新 这样的数据呢?往高人回答。

  • 写回答

1条回答 默认 最新

  • catstiger 2008-09-10 10:50
    关注

    同样的操作经常用到,比如部门管理,没有发现这个问题。
    应该与PARENT_ID=NULL没有关系。你可以试试:
    1.把当前的实体从父实体中移除:parent.getChildren().remove(child);
    2.update之前清空session缓存,session.clear()
    应该可以解决问题.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 使用C#,asp.net读取Excel文件并保存到Oracle数据库
  • ¥15 C# datagridview 单元格显示进度及值
  • ¥15 thinkphp6配合social login单点登录问题
  • ¥15 HFSS 中的 H 场图与 MATLAB 中绘制的 B1 场 部分对应不上
  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配