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
相关文章推荐
- 如何上传代码到git上
- 如何上传代码到git上
- android:webview实现简单的浏览器
- 如何上传代码到git上
- 【Linux 优化篇】之 编译安装Mysql与管理
- CoordinatorLayout Behaviors使用说明[翻译]
- WinCE 6 下键盘钩子(HOOK)
- Event Accessing
- JSPatch 部署安全策略
- 那些年使用Golang读取txt的坑!
- 在tableview上面的textfiled,还有textview,如何移动。
- MFC CStatic控件插入背景图片
- 过程作为黑箱抽象——《计算机程序的构造和解释》
- 基于jQuery的TreeGrid组件详解
- android 5.0 NFC支持
- Android Studio 中 proguard-rules.pro 的模版
- 按两次退出程序
- Hadoop数据分析平台学习笔记1
- oracle decode函数用法
- Websocket和PHP Socket编程