hibernate 实体注解在主键生成策略方面遇到的问题

问题描述: 

       在做单向一对多映射学习练习的时候遇到一个问题: Person和Address是单向一对多关系(Person中有一个Set的Address集合),在事物提交前,先对Address和Person对象进行了持久化,然后修改Person中的Set<Address>的值(添加一个Address对象),最后提交事物,Address的主键生成策略为自增,但是出现address数据库表中主键值不连续情况(在Person对象持久化前持久化的Address对象和之后持久化的对象主键值相差二),如图从2调到了4,搞不清楚为什么。
                                   


产生原因:

      原来用的是 @GeneratedValue(strategy = GenerationType.AUTO), 数据库里面会自动建立一张表 ,网上说用AUTO的话主键由程序指定,我没有给记录指定主键值,由hibernate自动给指定的,出了主键不连续问题。改成@GeneratedValue(strategy = GenerationType.IDENTITY)后,数据库里面也没有再自动建立一张表了,主键值变得连续,回复正常。


剖析:

        主键不连续还有可能是由于在记录插入的过程中,先插入然后删除记录,最后再插入记录的情况,在这种情况下,主键值不会随着记录的删除而自动收缩,在下一次插入记录的时候任然以删除记录(最大值)的主键值为准自增

      

       部门经理资料:http://www.educity.cn/wenda/404038.html






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值