ITKeyword,专注技术干货聚合推荐

注册 | 登录

SSH框架HIBERNATE下MYSQL主键自增和hbm中increment ,entry duplicate column 问题

long636 分享于 2016-05-16

2019阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

最近看到别人一个小的系统中,数据库表中主键设置成了varchar,同时在hibernate中设置了主键increment自增的属性;然后在系统中删除了几条数据,然后再插入数据是出现了entry duplicate column 的问题错误。

分析一下,mysql中该表设置了主键,但是主键类型是varchar类型,心想可能可表中数据有关系,于是与就查看了它数据库表中数据,其中ID是1,2,5,6,7,8,9,10,13 等等,

而当前插入数据提示entry duplicate ‘5’ 处理问题,也可能就是插入实体,其主键为5的,不允许插入。这可能与varchar类型有关,因为hibernate设置了该主键自增,可能他查询会按照varchar来排序,一看3,4没有,那插入时可能就会插入主键为3,为4的,结果到了5,因为数据库表中已经存在了5的主键,所以提示出现了错误。为了验证这个东西,继续往里面插入数据,如果有entry duplicate ‘6’ ,7,8,9,10 的错误提示,同时到11,12 却没有错误出现,13又出现,可可以证明吧。这个同时应该和每次启动服务,也有关系,每次启动服务器后,猜想hibernate肯定会读一次当前的主键值,然后再插入时会在此基础上计算的。因此就会出现这样的错误。


自己窃喜,这算不算hibernate的一个bug。但是如果换成是int的主键,则应该不会出现这样的问题,为此又做了实验,将该数据类型该为int,ID仍旧是1,2,5,6,7,8,9,10,13

这次则是在mysql中没有出现这样的问题,是直接在最大数据ID基础上往上累加的。不知道在其他数据库上,hibernate使用会不会出现这样的问题。记录仅供参考。

最近看到别人一个小的系统中,数据库表中主键设置成了varchar,同时在hibernate中设置了主键increment自增的属性;然后在系统中删除了几条数据,然后再插入数据是出现了entry duplicate column

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。