初学Hibernate主键生成策略
2015-08-15 23:42
621 查看
具有业务含义的主键叫自然主键;随机生成,不具备业务含义的字段作为主键,叫代理主键。
在表与POJO类关系映射文件XXX.hbm.xml中,可通过配置id元素下generator节点的class属性指定数据表主键生成策略<generator class="生成策略"></generator>;所谓主键生成策略就是hibernate怎样管理表的主键
主键生成策略:1~4自动增长(1、2、3······),代理主键;5主键为字符串,代理主键;6一般用于自然主键,需要在程序里指定主键值,无法自动生成
1、increment;代表主键是自动增长的,是由hibernate本身来管理。
注意:数据库要支持自动增长,如MySQL,SQLserver;Oracle不可以;在多线程情况下,可能会产生主键冲突问题
2、identity;由底层数据库生成,不由hibernate本身来管理
注意:数据库支持自动增长,如MySQL,SQLserver;Oracle不可以;
3、sequence;标识符生成器利用底层数据库提供的序列来生成标识符
注意:数据库支持序列,和hibernate程序无关,如Oracle支持,而MySQL就不可以;如Oracle数据库有序列customer_seq,则配置如:<generator class="sequence">customer_seq</generator>
4、native;标识符依据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence,或hilo标识符生成器,如MySQL自动选择identity,Oracle自动选择sequence
5、uuid;主键是字符串的可以用uuid来处理,随机产生32字符串
6、assigned;一般用于自然主键,无法自动生成,需要程序指定值
7、复合主键;需要在配置文件里指定复合主键id;如有Person类和Person表,Person表有复合主键firstName和secondName,和age字段
注意:Person类必须实现序列化接口Serializable
在表与POJO类关系映射文件XXX.hbm.xml中,可通过配置id元素下generator节点的class属性指定数据表主键生成策略<generator class="生成策略"></generator>;所谓主键生成策略就是hibernate怎样管理表的主键
主键生成策略:1~4自动增长(1、2、3······),代理主键;5主键为字符串,代理主键;6一般用于自然主键,需要在程序里指定主键值,无法自动生成
1、increment;代表主键是自动增长的,是由hibernate本身来管理。
注意:数据库要支持自动增长,如MySQL,SQLserver;Oracle不可以;在多线程情况下,可能会产生主键冲突问题
2、identity;由底层数据库生成,不由hibernate本身来管理
注意:数据库支持自动增长,如MySQL,SQLserver;Oracle不可以;
3、sequence;标识符生成器利用底层数据库提供的序列来生成标识符
注意:数据库支持序列,和hibernate程序无关,如Oracle支持,而MySQL就不可以;如Oracle数据库有序列customer_seq,则配置如:<generator class="sequence">customer_seq</generator>
4、native;标识符依据底层数据库对自动生成标识符的支持能力,来选择使用identity,sequence,或hilo标识符生成器,如MySQL自动选择identity,Oracle自动选择sequence
5、uuid;主键是字符串的可以用uuid来处理,随机产生32字符串
6、assigned;一般用于自然主键,无法自动生成,需要程序指定值
7、复合主键;需要在配置文件里指定复合主键id;如有Person类和Person表,Person表有复合主键firstName和secondName,和age字段
<hibernate-mapping> <!-- 类与表关系,name类全名称,table表名 --> <class name="cn.hjp.domain.Person" table="Person"> <!-- 复合主键 --> <composite-id> <key-property name="firstName"></key-property> <key-property name="secondName"></key-property> </composite-id> <property name="age" column="age" type="int"></property> </class> </hibernate-mapping>
注意:Person类必须实现序列化接口Serializable
相关文章推荐
- RHEL7 -- Linux搭建FTP虚拟用户
- System.out.println(2-1.1);
- poj 1947 Rebuilding Roads 树形dp
- 刀哥多线程自动释放池autoreleasepool
- UVa 11292 - Dragon of Loowater
- 网络路由设计基础
- SimpleDateFormat bug排查
- polya计数回顾
- vijos - P1223麦森数 (高精度乘法 + 分治 + python)
- 自己定义一个依赖属性 Wpf
- matlab通过摄像头获取图像进行处理
- NET下三种缓存机制(Winform里面的缓存使用 )
- LeetCode:Lowest Common Ancestor of a Binary Tree
- 通过GemBox.Spreadsheet完美操作Excel
- 如何让项目使用myEclipse部署成tomcat的ROOT目录
- PHP学习笔记-非常有用的 PHP 代码片段(1)
- python中的map、filter、reduce函数
- 关于导航栏全屏横滑返回
- Java基础之IO
- BZOJ1709超级弹珠