理解JPA注解@GeneratedValue的使用方法

  


  

  

通过注释来映射hibernate实体的,基于hibernate注释的主键标识为@ id,

  

其生成规则由@GeneratedValue设定的。这里的@ id和@GeneratedValue都是JPA的标准用法,

  

JPA提供四种标准用法,由@GeneratedValue的源代码可以明显看出。

        目标({方法,字段})   @Retention(运行时)   公共@ interface GeneratedValue {   GenerationType策略()默认的汽车;   字符串生成器()默认””;   }   之前      

其中GenerationType:

        公共enum GenerationType {   表,   序列,   的身份,   汽车   }   之前      

JPA提供的四种标准用法为表、序列,身份,汽车。

  
      <李>表:使用一个特定的数据库表格来保存主键。   <李>序列:根据底层数据库的序列来生成主键,条件是数据库支持序列。   <李>标识:主键由数据库自动生成(主要是自动增长型)   <李>汽车:主键由程序控制。   
  

表比较复杂,这里不讲解。分别介绍其他三个:
  

  

<强> 1。序列
  

  

实体类中的注解

        @ id   @GeneratedValue(策略=GenerationType.SEQUENCE发电机=癮aa”)   generator(名称=" aaa " sequenceName=皊eq_payment”)      

generator定义         @Target(}{类型、方法、字段)   @Retention(运行时)   公共@ interface SequenceGenerator {   字符串名称();   字符串sequenceName()默认””;   int initialValue()默认0;   int allocationSize()默认50;   }   之前      

      <李>名称属性表示该表主键生成策略的名称,它被引用在@GeneratedValue中设置的“发电机”值中。   <李> sequenceName属性表示生成策略用到的数据库序列名称。   <李> initialValue表示主键初识值,默认为0。   <李> allocationSize表示每次主键值增加的大小,例如设置成1,则表示每次创建新记录后自动加1,默认为50。   
  

<强> 2。身份
  

  

主键则由数据库自动维护,使用起来很简单

        @ id   @GeneratedValue(策略=GenerationType.IDENTITY)      

<强> 3、汽车
  

  

默认的配置。如果不指定主键生成策略,默认为汽车。

        @ id   @GeneratedValue(策略=GenerationType.AUTO)      


  

  

hibernate提供多种主键生成策略,有点是类似于JPA、有的是hibernate特有,下面列出几个hibernate比较常用的生成策略:

  
      <李>本地:对于oracle采用序列方式,对于MySQL和SQL Server采用身份(自增主键生成机制),本地就是将主键的生成工作交由数据库完成,hibernate不管李   <李> uuid:采用128位的uuid算法生成主键,uuid被编码为一个32位16进制数字的字符串。占用空间大(字符串类型)。   <李>分配:在插入数据的时候主键由程序处理(即程序员手动指定),这是& lt; generator>元素没有指定时的默认生成策略。等同于JPA中的汽车。   <李>标识:使用SQL Server和MySQL的自增字段,这个方法不能放到甲骨文中,Oracle不支持自增字段,要设定序列(MySQL和SQL Server中很常用)。等同于JPA中的单位。   <李>增量:插入数据的时候hibernate会给主键添加一个自增的主键,但是一个hibernate实例就维护一个计数器,所以在多个实例运行的时候不能使用这个方法。   
  

hibernate提供了多种生成器供选择,基于注释的方式通过@GenericGenerator实现。
  

  

hibernate每种主键生成策略提供接口org.hibernate.id.IdentifierGenerator的实现类,如果要实现自定义的主键生成策略也必须实现此接口。

        公共接口IdentifierGenerator {/* *   *配置参数实体名称   */公共静态最终字符串ENTITY_NAME=癊NTITY_NAME”;/* *   *生成一个新的标识符。   * @param会话   * @param对象的实体或顶层的集合id被生成   *   * @return新标识符   * @throws HibernateException   */公众可序列化的生成(SessionImplementor会话对象对象)   HibernateException扔;   }      之前      

IdentifierGenerator提供一生成方法,生成方法返回产生的主键。

理解JPA注解@GeneratedValue的使用方法