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

问题描述

public class SysModel extends BaseEntity<SysModel> {@ManyToOne(cascade = { CascadeType.MERGE })@JoinColumn(name = "PARENT_ID")private SysModel sysModel; .......} 映射文件大概如此, 有一个自关联字段。在操作的时候,遇到一个问题,当此字段为 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] - <Could not synchronize database state with session>org.hibernate.TransientObjectException: object references an unsaved transient instance - save the transient instance before flushing: com.sctt.system.sys.model.bean.SysModelat 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;如何才能更新 这样的数据呢?往高人回答。

解决方案

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

时间: 2024-09-20 00:31:23

hibernate3 的多对一的外键更新问题!的相关文章

如何在DJANGO里,向有外键(一对多和多对多)的DB里插入数据?

需要插入的数据表结构如下:   [python] view plaincopy   class UserInfo(models.Model):       user_id =models.AutoField(primary_key=True)       user_name=models.CharField(max_length=20,unique=True)        depart=models.ForeignKey(DepartmentInfo)       role=models.Ma

数据库主键,外键,关系,级联保存、更新、删除

数据|数据库 --建立数据库create database test;go --建立表customerscreate table customers(id int identity(1,1) not null,name varchar(15),age int,primary key(id));go --建立表orderscreate table orders(id int identity(1,1) not null,order_number varchar(15),price money,cu

MySQL使用外键实现级联删除与更新的方法_Mysql

本文实例讲述了MySQL使用外键实现级联删除与更新的方法.分享给大家供大家参考,具体如下: MySQL支持外键的存储引擎只有InnoDB,在创建外键的时候,要求父表必须有对应的索引,子表在创建外键的时候也会自动创建对应的索引.在创建索引的时候,可以指定在删除.更新父表时,对子表进行的相应操作,包括RESTRICT.NO ACTION.SET NULL和CASCADE.其中RESTRICT和NO ACTION相同,是指在子表有关联记录的情况下父表不能更新:CASCADE表示父表在更新或者删除时,更

sql-SQL相关(分区,更新外键,多个外键关联)

问题描述 SQL相关(分区,更新外键,多个外键关联) 1.分区函数:为什么分区一直报错"数据库中已经存在对象" 代码:use food go create partition function pf_eva_date(datetime) as range left for values(2012) 2.如何在表中更新外键,最好用可视化界面不要脚本(表已建好保存了) 3.如果美食表中,美食有多个,怎么关联这多个外键?

django rest framework如何实现nest field显示,如何保存有外键的字段更新

一步一步深入了. 相关设置技巧如下: 直接nest field显示: class VersionPoolSerializer(serializers.ModelSerializer): site_name = serializers.ReadOnlyField(source='site_name.name') dep_version = DeployPoolSerializer(many=True, required=False, read_only=True) create_user = se

数据库中主键和外键的设计原则

主键和外键是把多个表组织为一个有效的关系数据库的粘合剂.主键和外键的设计对物理数据库的性能和可用性都有着决定性的影响.      必须将数据库模式从理论上的逻辑设计转换为实际的物理设计.而主键和外键的结构是这个设计过程的症结所在.一旦将所设计的数据库用于了生产环境,就很难对这些键进行修改,所以在开发阶段就设计好主键和外键就是非常必要和值得的.  首先来谈:主键.  关系数据库依赖于主键 --- 它是数据库物理模式的基石.主键在物理层面上只有两个用途: 1. 惟一地标识一行. 2. 作为一个可以被

如何区分SQL数据库中的主键与外键_MsSql

一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 用户表(用户名.密码.登录级别) 其中用户名是唯一的, 用户名就是一个主键 上机记录表(卡号,学号,姓名.序列号) 上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键 上机记录表中的序列号不是成绩表的

如何区分SQL数据库中的主键与外键

一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键比如 : 学生表(学号,姓名,性别,班级) 其中每个学生的学号是唯一的,学号就是一个主键 用户表(用户名.密码.登录级别) 其中用户名是唯一的, 用户名就是一个主键 上机记录表(卡号,学号,姓名.序列号) 上机记录表中单一一个属性无法唯一标识一条记录,学号和姓名的组合才可以唯一标识一条记录,所以 学号和姓名的属性组是一个主键 上机记录表中的序列号不是成绩表的

MySQL数据库中的外键约束详解

使用MySQL开发过数据库驱动的小型web应用程序的人都知道,对关系数据库的表进行创建.检索.更新和删除等操作都是些比较简单的过程.理论上,只要掌握了最常见的SQL语句的用法,并熟悉您选择使用的服务器端脚本语言,就足以应付对MySQL表所需的各种操作了,尤其是当您使用了快速MyISAM数据库引擎的时候.但是,即使在最简单的情况下,事情也要比我们想象的要复杂得多.下面我们用一个典型的例子进行说明.假设您正在运行一个博客网站,您几乎天天更新,并且该站点允许访问者评论您的帖子. 在这种情况下,我们的数