`
朱嘉华
  • 浏览: 233214 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

hibernate产生自动增长的主键

阅读更多

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”
  使用另外一个相关联的对象的标识符作为主键。

0
1
分享到:
评论

相关推荐

    在hibernate中实现oracle的自动增长

    在hibernate中实现oracle的自动增长

    Hibernate3.1_学习源码

    04 04Hibernate_Composite : 复合主键的使用,在开发中很少用到,一般良好的设计都会为一个表添加一个自动增长的主键标识列。其中重点配置方法和Hibernate中普遍采用的方法链编程的使用。还需注意可以将组合主键构建...

    Hibernate注解

    * GenerationType.IDENTITY 主键由数据库自动生成(主要是自动增长类型) * GenerationType.SEQUENCE 根据底层数据库的序列来生成主键,条件是数据库支持序列。(这个值要与generator一起使用) * generator 指定...

    精通hibernate:对象持久化技术孙卫琴第二版part2

    6.1.1 把主键定义为自动增长标识符类型 123 6.1.2 从序列(Sequence)中获取自动增长的标识符 124 6.2 Java语言按内存地址区分不同的对象 125 6.3 Hibernate用对象标识符(OID)来区分对象 126 6.4 Hibernate的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     6.1.1 把主键定义为自动增长标识符类型  6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器...

    Struts2+hibernate雇员部门操作

    实现了增删改,分页操作(数据库两张表主键要改成自动增长)

    精通Hibernate:对象持久化技术第二版part3

    6.1.1 把主键定义为自动增长标识符类型 123 6.1.2 从序列(Sequence)中获取自动增长的标识符 124 6.2 Java语言按内存地址区分不同的对象 125 6.3 Hibernate用对象标识符(OID)来区分对象 126 6.4 Hibernate的...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     6.1.1 把主键定义为自动增长标识符类型  6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     6.1.1 把主键定义为自动增长标识符类型  6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     6.1.1 把主键定义为自动增长标识符类型  6.1.2 从序列(Sequence)中获取自动增长的标识符 6.2 Java语言按内存地址区分不同的对象 6.3 Hibernate用对象标识符(OID)来区分对象 6.4 Hibernate的内置标识符生成器...

    Java面试宝典2020修订版V1.0.1.doc

    37、oracle如何设置主键自动增长? 53 38、表连接、子查询的区别是什么?它们可以相互转化吗?你倾向于用哪种,为什么? 54 39、oracle数据库表的备份及还原 54 40、谈谈你知道的数据库和中间件 54 41、oracle和...

    jdbc基础和参考

    1.increment:自动增长 select max(id) from table; 找到最大值之后+1赋给要持久化的对象 2.assigned:指派 hibernate不在自动生成主键值,需要你在插入时自己指明 3.hilo:高低值算法,由数据库表提供高值,程序...

Global site tag (gtag.js) - Google Analytics