hibernate产生自动增长的主键

  • Post author:
  • Post category:其他


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


根据使用的数据库自行判断采用


identity





hilo





sequence


其中一种作为主键生成方式。







uuid.hex









Hibernate


基于


128




UUID 算法 生成



16


进制数值(编码后以长度


32


的字符串表示)作为主键。







uuid.string









uuid.hex


类似,只是生成的主键未进行编码(长度


16


),不能应用在


PostgreSQL


数据库中










foreign






使用另外一个相关联的对象的标识符作为主键。






版权声明:本文为sunsnow8原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。