在我的系统中人员和用户是一对一的关系,用户表中存在一个外键关联着人员的主键,同时用户又关联着审批历史等信息。当删除人员时,为了保留员工的历史信息,这个人员不是真正的从数据库中删除,而是修改人员的一个属性,让它不可见,同时设置用户的失效时间为当前时间。当删除用户时,设置用户失效时间为当前时间,同时外键置空。在外键置空操作时会报错:
Hibernate: update t_user set username=?, password=?, createTime=?, expireTime=?, person_id=? where id=?
08:54:57,156  WARN JDBCExceptionReporter:77 - SQL Error: 0, SQLState: 22001
08:54:57,156 ERROR JDBCExceptionReporter:78 - Data truncation: Column set to default value; NULL supplied to NOT NULL column 'person_id' at row 1
08:54:57,171 ERROR AbstractFlushingEventListener:301 - Could not synchronize database state with session为什么人员不能置空?我应该如何修改?

解决方案 »

  1.   

    提示很清楚
     Column set to default value; NULL supplied to NOT NULL column 'person_id' at row 1 'person_id' 这个字段不能为空,这是你数据库设置的,但是你在修改的是orm对象的这个字段肯定是空的,你debug一下就清楚了,person表对象的id属性一定是null的
      

  2.   

    我知道他是null,我就是要把它设置成null,我帖子上说的很清楚了啊,我需要把外键置空,现在的问题是不允许我置空,why?
      

  3.   

    在数据库看看你的t_user表的结构,person_id是不是不能为空NOT NULL?
      

  4.   

        你的表结构那个外键是否为 not null
      

  5.   

    難到不把值設置成null﹐就達不到你目的了嗎??
      

  6.   

    person_id
     设置可以为空就可以了
      

  7.   

    关系表中和实体表中的person_id应该都是NULL吧