hibernate利用mysql的自增张id属性实现自增长id和手动赋值id并存
来源:互联网 发布:防arp攻击软件 编辑:程序博客网 时间:2024/05/16 09:41
我们知道在mysql中如果设置了表id为自增长属性的话,insert语句中如果对id赋值(值没有被用到过)了,则插入的数据的id会为用户设置的值,并且该表的id的最大值会重新计算,以插入后表的id最大值为自增值起点
但是如果使用hibernate,也想实现这个mysql的特性的话,怎么做呢?
首先我们看下hibernate的id生成策略:
**hibernate文档写道**
简介版:increment:代理主键,适合于所有数据库,由hibernate维护主键自增,和底层数据库无关,但是不适合于2个或以上hibernate进程。identity:代理主键,适合于Mysql或ms sql server等支持自增的dbms,主键值不由hibernate维护。sequence:代理主键,适合于oracle等支持序列的dbms,主键值不由hibernate维护,由序列产生。native:代理主键,根据底层数据库的具体特性选择适合的主键生成策略,如果是mysql或sqlserver,选择identity,如果是oracle,选择sequence。hilo:代理主键,hibernate把特定表的字段作为hign值,生成主键值uuid.hex:代理主键,hibernate采用uuid 128位算法生成基于字符串的主键值assign:适合于应用程序维护的自然主键。
想要实现安全的自增只能使用hibernate维护得自增属性identity,或者使用开发者自己维护id值assign。如果使用identify,经过测试发现使用无论开发者是否给对象的id赋值,hibernate在保存对象时会自动给id赋值(为mysql表中id最大值+1);如果使用assign,用户在保存对象前必须给对象的id赋值,值必须大于等于0,如果等于0时,那么数据表id记录会使用mysql数据库维护的最大id+1,如果大于0时,则表id则为用户设置的对象的id值。
经过实验得出,想要实现mysql的sql语句句式以及最终效果,需要设置hibernate配置文件的id自增属性为assign,如果知道id的话则设置对象的id为已知的id,否则设置id的值为0,。
如果id自增属性为assign,那么hibernate保存对象后,对象的id仍然为保存前设置的值;
如果id自增属性为identity,那么hibernate保存对象后,对象的id为数据库中该条记录的id的值
0 0
- hibernate利用mysql的自增张id属性实现自增长id和手动赋值id并存
- hibernate利用mysql的从增张id属性实现自增长id和手动赋值id并存
- hibernate利用mysql的自增长id属性实现自增长id和手动赋值id并存
- hibernate注解ID自增长
- hibernate注解ID自增长
- hibernate注解ID自增长
- mysql 自增长id 清零
- mysql insert_select ID 自增长
- mysql insert_select ID 自增长
- MySQL重置自增长的id
- 查看MySQL的自增长ID
- oracle实现id自增长
- oracle 实现 id 自增长
- MongoDB自增长ID的实现
- Mongodb 自动增长 自增id 实现
- Mongodb 自动增长 自增id 实现
- Mongodb 自动增长 自增id 实现
- Oracle ID自增长
- Anaconda4.3.1.0 + opencv3.2 + python3.6 + win8安装配置
- 初学web前端-20170425
- MySql镜像安装
- Maven工程问题
- MYSQL5.7:Access denied for user 'root'@'localhost' (using password:YES)解决方法
- hibernate利用mysql的自增张id属性实现自增长id和手动赋值id并存
- java工具类——String过滤敏感字
- [zz终于搞懂]后缀数组-建数组代码分析
- 关于PHP内部编码与mysql字符差异问题的研究
- RecyclerView实现时光轴效果
- 【转载】C++常见问题: 字符串分割函数 split
- 梯度下降法
- ArduPilot源码学习--(一)--MAC下编译ArduPilot源码
- Python模块os