hibernate_主键设置
来源:互联网 发布:苏州网络布线 编辑:程序博客网 时间:2024/06/13 21:13
hibernate的映射文件可以帮我们管理表的主键。
首先奉上USER表的映射文件,表的有2个属性:id和name
<class name="User" table="user"> <id name="id" type="int" column="id"> <generator class="native" /> </id> <property name="name" type="int" column="name"/></class>
ok,id就是主键了,generater就是主键值生成的方式了,我们在设计主键的时候一般会设置自增长或其他生成唯一值的算法。hibernate能支持的也挺多的,官方给的文档中写得挺多了,这里挑几种来玩玩。
1.increment
<id name="id" type="int" column="id"> <generator class="increment" /></id>
这种方式是从先从表中获取max(id),再进行赋值,显然,有经验的人都会第一时间想到这种方式有线程安全问题,所以不推荐使用。
2.identity 自增长
<id name="id" type="int" column="id"> <generator class="identity" /></id>
这是使用自增长的方式生成值,支持很多数据库,比如DB2, MySQL, MS SQL Server, Sybase 和 HypersonicSQL,它返回的值类型是long, short 和 int。
3.sequence
<id name="id" type="int" column="id"> <generator class="sequence" > <param name="sequence">sequenceName</param> </generater></id>
这是序列生成的方式,需要支持序列的数据库才可以使用,比如:DB2, PostgreSQL, Oracle, SAP DB, McKoi等,返回的值类型是long, short or int.
4.hilo
<id name="id" type="int" column="id"> <generator class="hilo"> <param name="table">hi_lo</param> <param name="column">next_value</param> <param name="max_lo">100</param> </generator></id>
这是根据hilo算法生成值,这种方式需要额外建一张表进行维护。参数中table就是需要的表,column就是表中的列了,max_lo是一个算法的参数,这个值决定了每次生成的值是什么样的。这种方式支持所有的数据库。
5.seqhilo
<id name="id" type="int" column="id"> <generator class="seqhilo"> <param name="sequence">sequenceName</param> <param name="max_lo">100</param> </generator></id>
这是基于序列的hilo算法,和hilo类似,只不过它需要序列支持,所以也只能支持有序列的数据库了。
6.uuid
<id name="id" type="string" column="id"> <generator class="uuid" /></id>
这是生成一串128位的UUID字符串,以32位16进制的值保存。默认配置中,字符串是没有分隔符的,比如:967eddd2b20611e488b200163e001c95。如果需要,可以配置:
<id name="id" type="string" column="id"> <generator class="uuid" > <param name="separator" >-</param> </generater></id>
这样配置之后,字符串之间会用”-“分割,不过,分割的方式是按88484的位数进行分割的,如:967eddd2-b20611e4-88b2-00163e00-1c95
7.uuid2
<id name="id" type="string" column="id"> <generator class="uuid2" /></id>
和uuid一样,生成128位的字符串,并且以32位16进制进行保存。不同的是它带有”-“分隔符,并且是按844412的位数进行分割的。
8.guid
<id name="id" type="string" column="id"> <generator class="guid" /></id>
这个也是生成一个串,不过是交给数据库去生成,由数据库决定生成什么样的串。
9.native
<id name="id" type="int" column="id"> <generator class="native" /></id>
这是交给数据库去选择(identity, sequence 或 hilo),由数据库决定怎样生成值,也是常用的配置。
10.assigned
<id name="id" type="int" column="id"> <generator class="assigned" /></id>
这是由程序自己生成,这就意味着我们需要手动的去设置这个值了。
官方给的文档还有select 、 foreign 、sequence-identity,
有兴趣的可以去看看章节:5.1.2.2.1. Various additional generators
- hibernate_主键设置
- Hibernate_主键生成策略
- hibernate_持久化类、主键生成策略
- 15. Hibernate_基于主键映射的1-1关联关系
- 设置主键
- 主键设置
- sql 设置主键 联合主键
- Hibernate_映射_关联关系_一对一映射3_基于主键的方式
- 为DataTable设置主键
- oracle主键的设置
- oracle主键的设置
- oracle主键的设置
- oracle主键的设置
- ORACLE设置递增主键
- oracle主键设置
- oracle主键的设置
- SQLite 设置主键
- hibernate 联合主键设置
- HDU 1712 ACboy needs your help(分组背包模板题)
- C++ 管理智能指针成员
- 编写出色的CSS代码13个的建议
- HDU 1171 Big Event in HDU(多重背包)
- 实习篇---春节回家
- hibernate_主键设置
- 一个关于Lucene,Solr,Hadoop ,HBase的学习教程
- char* 指向内容不能修改
- jvm 实战OutOfMemoryError
- HDU 2159 FATE(二维费用背包)
- select与poll的接口说明
- ubuntu 使用遇到的问题集锦
- Property Animator 属性动画概述与示例
- 北大校花李莹:三年的财富神话