注解 @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"包含了关于如何在实际项目中运用JPA,以及理解JPA主键生成策略的详细教程。 ### JPA基础 1. **JPA简介**: JPA是Java EE的一部分,它提供了一套规范,...
### JPA主键生成策略详解 #### 一、概述 持久化对象的主键生成机制在JPA(Java Persistence API)中占据着重要的位置。它不仅关乎数据的唯一标识符如何确定,还与数据的存储效率及应用逻辑紧密相关。JPA通过`@...
这里的`@Id`注解标记`id`字段为实体的主键,而`@GeneratedValue`注解表示主键生成策略。`GenerationType.IDENTITY`意味着主键值由数据库自动生成,比如在MySQL中,这通常对应于`AUTO_INCREMENT`。 **JPA主键生成...
在实际的IT项目中,主键的生成策略是数据库设计中的关键部分,它确保了数据的唯一性。本文主要探讨了在使用Java Persistence API ...在实际开发中,应根据项目需求和所使用的数据库类型,选择最适合的主键生成策略。
【标题】"04_传智播客JPA详解_第一个JPA实例与JPA主键生成策略"涉及的关键知识点主要包括Java Persistence API (JPA)的基础应用、首个JPA实例的创建以及JPA主键生成策略的理解和配置。JPA是Java平台上的一个标准,...
接下来,我们探讨如何在Hibernate中配置GUID主键生成策略。在Hibernate中,我们可以使用`@GeneratedValue`和`@GenericGenerator`注解来定义主键的生成策略。对于GUID,我们可以选择`GenerationType.UUID`。以下是一...
seqhilo是一种通过hilo算法实现的主键生成策略,但是主键历史保存在Sequence中。这种策略适用于支持Sequence的数据库,如Oracle。 increment increment是一种插入数据的时候hibernate会给主键添加一个自增的主键的...
综上所述,`GenerationType.TABLE`是一种适用于多线程环境的主键生成策略,通过在数据库中创建单独的表来管理主键序列。尽管它可能带来一定的性能影响,但能提供良好的并发性和可扩展性,特别适合分布式系统。在使用...
标题“使用表的id生成”涉及的是数据库管理和Java Persistence API (JPA) 中的一个关键概念:主键生成策略。在数据库表中,每个记录通常都有一个唯一的标识符,即主键,用于唯一地识别每条数据。在JPA中,有多种策略...
我们可以通过在配置文件中指定主键策略来实现 UUID 生成策略。 在实施方案中,我们可以直接用 Activiti 官方提供的 activiti-explorer 项目来更换主键策略。首先,我们需要找到部署的 war 包,更新它的配置文件,来...
联合主键的生成策略可以是自动生成(如`GenerationType.IDENTITY`),也可以是用户手动赋值。对于手动赋值,通常在创建新实体时,需要同时设置所有主键字段。如果希望使用自动生成,可能需要结合`@GeneratedValue`...
4. `@GeneratedValue`:用于配置主键生成策略,如自增、UUID等。 5. `@Column`:用于定义字段在数据库表中的列名、长度、是否可为空等属性。 6. `@Basic`:默认情况下,所有非主键字段都视为基本类型,可以使用此...
`@Id`表示主键,`@GeneratedValue`定义主键生成策略,这里使用了数据库自增策略。 4. **创建Repository接口** Spring Data JPA允许我们通过接口来操作数据库,无需编写SQL。创建一个继承`JpaRepository`的接口: ...
在Hibernate中,我们可以通过定义主键生成策略来实现UUID的使用。具体做法是在实体类的主键字段上使用`@GeneratedValue`和`@GenericGenerator`注解: ```java import javax.persistence.Entity; import javax....
JPA提供了多种主键生成策略,如`GenerationType.AUTO`、`GenerationType.IDENTITY`等,但这些策略大多适用于单个主键字段。对于联合主键,通常需要手动设置主键值,因为没有自动化的生成机制。 ### 5. 联合主键与...
这些注解包括`@Entity`、`@Table`、`@Id`、`@GeneratedValue`等,它们使得开发者可以直接在Java类上声明实体属性与数据库表字段的对应关系,以及主键生成策略等。 例如,`@Entity`注解标记一个类为实体类,`@Table`...
在Java编程语言中,Hibernate是一个流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,...在实际应用中,根据具体需求选择合适的主键策略,将有助于优化数据库设计和提高数据访问性能。
4. `@GeneratedValue`: 用于配置主键生成策略,比如自动增长、序列等。 5. `@Column`: 用于指定实体类属性映射到数据库表的列,可以设置列名、是否允许为空、长度等属性。 6. `@ManyToOne`, `@OneToOne`, `@...
为了使这个复合主键能够正确地参与到数据库的关联操作中,我们还需要创建一个对应的`@TableGenerator`,以便为每个复合主键生成一个唯一的序列号。这通常不是必需的,因为复合主键通常是业务逻辑决定的,而不是自增...