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

最近看到别人一个小的系统中,数据库表中主键设置成了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使用会不会出现这样的问题。记录仅供参考。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值