您的位置:首页 > 其它

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

2016-02-22 10:54 323 查看

问题描述: 

       在做单向一对多映射学习练习的时候遇到一个问题: 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: