hibernate自增主键

Hibernate中domain配置文件
 
将主键改成自增长类型:
 
Oracle设置<generator class=" increment" />
 
 
SQLServer 2000设置<generator class=" identity" />
 
―――――――――例如 SQLServer 2000中――――――――――――――――――
< id  name = "userid"  type = "java.lang.Integer" >
             < column  name = "userid"  />
             <generator class="identity" />
  </ id >
―――――――――――――――――Oracle ――――――――――――――――――
< id  name = "userid"  type = "java.lang.Integer" >
             < column  name = "userid"  />
             <generator class="increment" />
  </ id >
 
 
 
 
 
 
hibernate 提供了产生自动增长类型主键的多种策略 , 这里以 increment 为例说明具体用法
1
、在数据库中建立表,主键名称为 ID, 类型为 varchar2 (字符串型)  
2
、在 **.hbm.xml hibernate 映射文件)中配置如下  
<class name="com.jat.bisarea.ho.Test" table="BA_VVTEST"> 
<id name="id" type="int" column="ID"> 
//
该句指定使用 hibernate 自带的 increment 策略生成主键  
<generator class="increment"/> 
</id> 
<property name="uname" type="java.lang.String" column="UNAME"/> 
</class> 
3
、在 java 文件中对表增加记录时,只需添加除 ID 外的其他字段,然后 save 即可,相关 java 代码如下:  
Session s = HibernateUtil.currentSession(); 
Transaction tx = s.beginTransaction(); 
Test test = new Test(); 
String uname = httpServletRequest.getParameter("uname"); 
test.setUname(uname); 
//
只需对 uname 进行 set id hibernate 生成  
s.save(test); 
tx.commit(); 
4
、使用其它策略的方法基本一致,例如 hilo seqhilo  

Generator 
为每个  POJO  的实例提供唯一标识。一般情况,我们使用 “native” class  表示采用由生成器接口 net.sf.hibernate.id.IdentifierGenerator  实现的某个实例,其中包括:  
“assigned” 
主键由外部程序负责生成,在  save()  之前指定一个。  
“hilo” 
通过 hi/lo  算法实现的主键生成机制,需要额外的数据库表或字段提供高位值来源。  
“seqhilo” 
hilo  类似,通过 hi/lo  算法实现的主键生成机制,需要数据库中的  Sequence ,适用于支持  Sequence  的数据库,如 Oracle  
“increment” 
主键按数值顺序递增。此方式的实现机制为在当前应用实例中维持一个变量,以保存着当前的最大值,之后每次需要生成主键的时候将此值加 1 作为主键。这种方式可能产生的问题是:不能在集群下使用。  
“identity” 
采用数据库提供的主键生成机制。如 DB2 SQL Server MySQL  中的主键生成机制。  
“sequence” 
采用数据库提供的  sequence  机制生成主键。如  Oralce  中的 Sequence  
“native” 
 Hibernate 根据使用的数据库自行判断采用 identityhilosequence 其中一种作为主键生成方式。  
“uuid.hex” 
 Hibernate  基于 128   UUID  算法 生成 16  进制数值(编码后以长度 32  的字符串表示)作为主键。  
“uuid.string” 
uuid.hex  类似,只是生成的主键未进行编码(长度 16 ),不能应用在  PostgreSQL  数据库中。  
“foreign” 
使用另外一个相关联的对象的标识符作为主键。
 
 
 
 
1. native 
我最常用的。可以保证多个数据库之间的可移植性。但是有可能有时候会有问题:因为不能控制 id 值,在数据倒表的时候可能无法满足业务需要。
2. sequence
这种地方可以解决上面用 native 时候的问题,但是需要堆数据库做一些其他配置。
3. uuid
理论上可以保证多个数据库生成的 ID 在一个系统里唯一,有时候挺有用。但是效率稍微低点(其实都无所谓)。
4. increment
最好不要用。如果有其他程序访问、修改数据库,那就恐怖了。
5. assigned
没怎么用过。一般不会用手工方式赋值主键,除非有特殊的需求。
6.  foreign
one-to-one 的时候可能会用到。
7. 
在使用数据库自动生成主键的时候, SQL 语句会有所不同:有些数据库不许你填主键,有些要求你该字段必须为 null ,有些会完全忽略你写的主键的值。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值