前言:mysql int类型(M)括号中填的数字是  显示宽度  而不是列的长度  (PS:网上看到的)我数据库中  
int(10)作为主键列当数据添加到  Duplicate entry '4770549' for key 'PRIMARY'4770549  就添加不进去了错误提示: org.hibernate.AssertionFailure: null id in com.zqkj.entity.StatExitModel entry (don't flush the Session after an exception occurs)
我一看org.hibernate.AssertionFailure 异常  要么就是字段类型不匹配、要么是有关键字、要么是长度不够我这程序跑三个月了  前两个我就排除了  那就剩下长度问题了一共三个字段 一个主键  一个时间  一个UID  UID是varchar我设置了255(hibernate建表默认的 我也没改) 那就剩主键了  然后我把10改成20 就可以正常运行了  求大神指导  这是什么情况

解决方案 »

  1.   

    主键当然不能重复添加了
    简单说  就是(M)忽略吧  一点用没有  这个就是个显示长度的问题 存储长度是int 4字节
      

  2.   

    show create table 贴出来以供分析。INT可以支持到 2147483647 哪怕是 INT(1) 也同样。
      

  3.   


    CREATE TABLE `tb_statistic_exit` (
      `id` int(20) NOT NULL AUTO_INCREMENT,
      `uid` varchar(500) NOT NULL,
      `visitTime` datetime DEFAULT NULL,
      `onlineTime` varchar(500) DEFAULT NULL,
      PRIMARY KEY (`id`),
      KEY `idx_uid_id` (`uid`(333))
    ) ENGINE=MyISAM AUTO_INCREMENT=4792763 DEFAULT CHARSET=utf8
      

  4.   

    建议楼主同样做如下测试,应该不是INT字段长度的问题。感觉上应该在程序端出问题了。 你可以打开一般查询日志做跟踪,看到底程序提交到数据库的语句是什么。