`
ice19871117
  • 浏览: 4633 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

关于 persistence 中主键的生成策略

 
阅读更多

注解 @javax.persistence.Id 标示了构成表中主键的一个或多个成员属性。

 

我们可以为 entity bean 手工生成主键,也可以让 persistence provider 代劳。

 

如果需要让 persistence provider 代劳,必须使用注解 @javax.persistence.GeneratedValue

 

以下是几种主键生成策略的介绍:

 

 

AUTO 策略

 

指明由 persistence provider 自动生成主键,也是 GeneratedValue 默认的生成策略。

 

Java代码:

@Id

@GeneratedValue

private int id;

 

XML代码:

<id name="id">

<generated-value strategy="AUTO" />

</id>

 

 

IDENTITY 策略

 

自动增加标识,如 mysql、mssql 等,许多数据库都有对此属性实现

 

 

Java代码:

@Id

@GeneratedValue(strategy=GenerationType.IDENTITY)

private int id;

 

XML代码:

<id name="id">

<generated-value strategy="IDENTITY" />

</id>

 

 

 

TABLE 策略

 

定义一张关系表,并利用该表生成数值型的主键

 

create table GENERATOR_TABLE

(

  PRIMARY_KEY_COLUMN VARCHAR not null

, VALUE_COLUMN long not null

)

 

字段 PRIMARY_KEY_COLUMN 匹配要生成的主键,字段  VALUE_COLUMN 持有计数器的值。

 

 

Java代码:

@TableGenerator(name="CUST_GENERATOR"

   ,  table="GENERATOR_TABLE"

   ,  pkColumnName="PRIMARY_KEY_COLUMN"

   ,  valueColumnName="VALUE_COLUMN"

   ,  pkColumnValue="CUST_ID"

   ,  allocationSize=10)

 

@Id

@GeneratedValue(strategy=GenerationType.TABLE, generator="CUST_GENERATOR")

private int id;

 

XML代码:

<table-generator name="CUST_GENERATOR"

    table="GENERATOR_TABLE"

    pk-column-name="PRIMARY_KEY_COLUMN"

    value-column-name="VALUE_COLUMN"

    pk-column-value="CUST_ID"

    allocation-size="10" />

 

<attributes>

<id name="id">

<generated-value strategy="TABLE" generator="CUST_GENERATOR" />

</id>

 

</attributes>

 

 

TableGenerator 属性解释

 

name :定义了 @TableGenerator 的名称,该名称在 @Id.generator() 属性中被引用。

table : 定义了维护主键关系表的表名。

pkColumnName :待生成实体主键的字段名称。

valueColumnName :待生成实体主键计数器的字段名。

 

pkColumnValue :匹配需要生成的主键,此名是 PRIMARY_KEY_COLUMN 字段中的值。

allocationSize :当 persistence provider 在表中查询新值时,计数器一次递增多少。这允许 persistence    provider 缓存一批 ID,而不必在每次需要新的 ID 时都去访问数据库。

 

 

 

SEQUENCE 策略

 

序列生成器,如 Oracle

 

 

Java代码:

@SequenceGenerator(name="CUST_SEQUENCE",

  , sequenceName="CUST_SEQ")

 

@Id

@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="CUST_SEQUENCE")

private int id;

 

XML代码:

 

<sequence-generator name="CUST_SEQUENCE"

    sequence-name="CUST_SEQ"

    initial-value="0"

    allocation-size="50" />

 

<attributes>

<id name="id">

<generated-value strategy="SEQUENCE" generator="CUST_SEQUENCE" />

</id>

 

</attributes>

 

 

SequenceGenerator 属性解释

 

name :定义了 @SequenceGenerator 的名称,该名称在 @Id.generator() 属性中被引用。

sequenceName :指定使用数据库中哪一个 SEQUENCE。

initialValue :主键的初始值。

allocationSize :访问 sequence 时的递增值。



TABLE 和 SEQUENCE 生成器可以定义在类中的任何一处。

 

 

分享到:
评论

相关推荐

    持久化类主键生成策略+例子

    在Java的持久化框架中,如JPA(Java Persistence API)和Hibernate,主键生成策略是数据模型设计的重要部分。主键通常是表中唯一标识记录的一列或一组列,用于确保数据的完整性和唯一性。本篇文章将深入探讨JPA的4种...

    04_JPA详解_第一个JPA实例与JPA主键生成策略.zip

    本压缩包文件"04_JPA详解_第一个JPA实例与JPA主键生成策略.zip"包含了关于如何在实际项目中运用JPA,以及理解JPA主键生成策略的详细教程。 ### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,...

    JPA学习笔记-EJB-03JPA主键生成策略总结

    ### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...

    JPA环境搭建及JPA实例与JPA主键生成策略

    这里的`@Id`注解标记`id`字段为实体的主键,而`@GeneratedValue`注解表示主键生成策略。`GenerationType.IDENTITY`意味着主键值由数据库自动生成,比如在MySQL中,这通常对应于`AUTO_INCREMENT`。 **JPA主键生成...

    真实项目中关于主键生成方式的剖析(JPA)

    在实际的IT项目中,主键的生成策略是数据库设计中的关键部分,它确保了数据的唯一性。本文主要探讨了在使用Java Persistence API ...在实际开发中,应根据项目需求和所使用的数据库类型,选择最适合的主键生成策略。

    04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略

    【标题】"04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略"涉及的关键知识点主要包括Java Persistence API (JPA)的基础应用、首个JPA实例的创建以及JPA主键生成策略的理解和配置。JPA是Java平台上的一个标准,...

    mysql_guid主键生成方式范例

    接下来,我们探讨如何在Hibernate中配置GUID主键生成策略。在Hibernate中,我们可以使用`@GeneratedValue`和`@GenericGenerator`注解来定义主键的生成策略。对于GUID,我们可以选择`GenerationType.UUID`。以下是一...

    JPA主键策略(针对数据库自增字段重置后无效检查项)

    seqhilo是一种通过hilo算法实现的主键生成策略,但是主键历史保存在Sequence中。这种策略适用于支持Sequence的数据库,如Oracle。 increment increment是一种插入数据的时候hibernate会给主键添加一个自增的主键的...

    GenerationType.TABLE生成策略

    综上所述,`GenerationType.TABLE`是一种适用于多线程环境的主键生成策略,通过在数据库中创建单独的表来管理主键序列。尽管它可能带来一定的性能影响,但能提供良好的并发性和可扩展性,特别适合分布式系统。在使用...

    使用表的id生成

    标题“使用表的id生成”涉及的是数据库管理和Java Persistence API (JPA) 中的一个关键概念:主键生成策略。在数据库表中,每个记录通常都有一个唯一的标识符,即主键,用于唯一地识别每条数据。在JPA中,有多种策略...

    activit5的主键问题

    我们可以通过在配置文件中指定主键策略来实现 UUID 生成策略。 在实施方案中,我们可以直接用 Activiti 官方提供的 activiti-explorer 项目来更换主键策略。首先,我们需要找到部署的 war 包,更新它的配置文件,来...

    JPA中的联合主键

    联合主键的生成策略可以是自动生成(如`GenerationType.IDENTITY`),也可以是用户手动赋值。对于手动赋值,通常在创建新实体时,需要同时设置所有主键字段。如果希望使用自动生成,可能需要结合`@GeneratedValue`...

    JPA规范注解的javax.persistence包

    4. `@GeneratedValue`:用于配置主键生成策略,如自增、UUID等。 5. `@Column`:用于定义字段在数据库表中的列名、长度、是否可为空等属性。 6. `@Basic`:默认情况下,所有非主键字段都视为基本类型,可以使用此...

    springboot集成jpa代码,自动生成表

    `@Id`表示主键,`@GeneratedValue`定义主键生成策略,这里使用了数据库自增策略。 4. **创建Repository接口** Spring Data JPA允许我们通过接口来操作数据库,无需编写SQL。创建一个继承`JpaRepository`的接口: ...

    Hibernate用UUID作为主键的Demo

    在Hibernate中,我们可以通过定义主键生成策略来实现UUID的使用。具体做法是在实体类的主键字段上使用`@GeneratedValue`和`@GenericGenerator`注解: ```java import javax.persistence.Entity; import javax....

    JPA 联合主键

    JPA提供了多种主键生成策略,如`GenerationType.AUTO`、`GenerationType.IDENTITY`等,但这些策略大多适用于单个主键字段。对于联合主键,通常需要手动设置主键值,因为没有自动化的生成机制。 ### 5. 联合主键与...

    ejb3-persistence

    这些注解包括`@Entity`、`@Table`、`@Id`、`@GeneratedValue`等,它们使得开发者可以直接在Java类上声明实体属性与数据库表字段的对应关系,以及主键生成策略等。 例如,`@Entity`注解标记一个类为实体类,`@Table`...

    hibernate3 注释生成复合主键或者嵌入式主键的方法及实例.doc

    在Java编程语言中,Hibernate是一个流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,...在实际应用中,根据具体需求选择合适的主键策略,将有助于优化数据库设计和提高数据访问性能。

    javax persistence规范注解的包.rar

    4. `@GeneratedValue`: 用于配置主键生成策略,比如自动增长、序列等。 5. `@Column`: 用于指定实体类属性映射到数据库表的列,可以设置列名、是否允许为空、长度等属性。 6. `@ManyToOne`, `@OneToOne`, `@...

    hibernate复合主键映射

    为了使这个复合主键能够正确地参与到数据库的关联操作中,我们还需要创建一个对应的`@TableGenerator`,以便为每个复合主键生成一个唯一的序列号。这通常不是必需的,因为复合主键通常是业务逻辑决定的,而不是自增...

Global site tag (gtag.js) - Google Analytics