主键引起的1062错误主键重复Hibernate

昨晚在后台看到出现sql错误,观察是SQL 1062既主键重复无法插入到数据库。

查看代码,发现没有问题,之后想到是因为在项目中部署了两个工程但是他们又共用了一张表并且对这张表有DML操作。

解决办法:1:将多个字段设置为主键,使其唯一(只是数据库解决了)就是创建联合主键达到主键唯一(要创建联合主键则相应字段要设置为非NULL)。

查看后台是成功插入数据了。过了不久出现不能update了再查原因,发现是程序里的update是where id=?因为现在id不是主键了所以有重复不能根据id更新了,最后决定该程序

        2:最后的办法:将程序改为 @GeneratedValue(generator = "system-uuid")  @GenericGenerator(name = "system-uuid", strategy = "uuid") @Column(name = "id", length=32)数据库还是用id为主键,因为UUID被编码成一个32位16进制数字的字符串。UUID包含:IP地址、JVM启动时间、系统时间(精确到1/4秒)和一个计数器值(JVM中唯一)

所以这样id又唯一了。

最后想说碰到问题先查原因再一步一步修改,别着急。

引用了http://www.cnblogs.com/flyoung2008/articles/2165759.html

你可能感兴趣的:(主键引起的1062错误主键重复Hibernate)