@Id、@GeneratedValue的作用,以及@GeneratedValue的使用

简介: @Id、@GeneratedValue的作用,以及@GeneratedValue的使用

在Java持久化API(JPA)中,@Id@GeneratedValue注解是用于定义实体类的主键字段和主键生成策略的。这两个注解在构建基于JPA的ORM(对象关系映射)框架(如Hibernate)的应用时非常关键。


@Id

@Id注解用于声明实体类的某个属性为该实体的唯一标识符(即主键)。一个实体类只能有一个属性被标记为@Id


示例:

import javax.persistence.Entity;  
import javax.persistence.Id;  
  
@Entity  
public class User {  
    @Id  
    private Long id;  
  
    // 其他属性和方法  
}


在这个例子中,User类的id属性被标记为实体的主键。


@GeneratedValue

@GeneratedValue注解用于指定主键的生成策略。它可以与@Id注解一起使用,来定义主键的生成方式。如果不使用@GeneratedValue,则可能需要手动设置主键的值。


@GeneratedValue注解有几个重要的属性,但最常用的是strategy属性,它指定了主键的生成策略。strategy属性可以接受的值包括:


GenerationType.IDENTITY:主键由数据库自动生成(主要是自增类型),比如MySQL的自增主键。

GenerationType.SEQUENCE:使用数据库序列来生成主键,这通常是数据库特定的,比如Oracle。

GenerationType.TABLE:使用一个特定的数据库表来生成主键,这种方式是JPA提供的一种可移植的生成主键的策略。

GenerationType.AUTO:让JPA根据底层数据库自动选择最适合的主键生成策略。如果数据库支持IDENTITY,则使用IDENTITY;如果支持SEQUENCE,则使用SEQUENCE;否则,使用TABLE。

示例:

import javax.persistence.Entity;  
import javax.persistence.GeneratedValue;  
import javax.persistence.GenerationType;  
import javax.persistence.Id;  
  
@Entity  
public class User {  
    @Id  
    @GeneratedValue(strategy = GenerationType.IDENTITY)  
    private Long id;  
  
    // 其他属性和方法  
}


在这个例子中,User类的id属性不仅被标记为主键,还指定了主键的生成策略为IDENTITY,这意味着主键将由数据库自动生成(比如,使用MySQL的自增字段)。


总结

@Id和@GeneratedValue注解是JPA中用于定义实体类主键和主键生成策略的关键注解。@Id用于标记主键字段,而@GeneratedValue用于指定主键的生成策略,包括自增、序列、表生成和自动选择策略等。通过合理使用这两个注解,可以方便地实现实体类的主键管理。

相关文章
|
7月前
|
存储 NoSQL 数据库
全局id生成方式
全局id生成方式
|
7月前
|
存储 C# 数据库
C# 生成唯一ID,有哪些方法?
【2月更文挑战第12天】
949 0
|
存储 Oracle 关系型数据库
ORACLE:根据父id查询所有子孙数据,或者根据子id查询所有父数据(start with connect by prior)
一、需求: 我们在开发中经常遇到一种数据库表的设计:一个表中包含父子信息数据,也就是常说的树形数据. —> 最常见的例子就是省市区一体表,就是通过id、pid、level来进行控制,从而一张表来存储数据.我们进行拿数据的时候,不用再连表拿取,直接通过(start with connect by prior)直接便利就会得到数据.
764 2
ORACLE:根据父id查询所有子孙数据,或者根据子id查询所有父数据(start with connect by prior)
|
3月前
|
数据库 Python
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
现在有个外键值是area_id_id,我就想他叫area_id该怎么做
|
4月前
|
监控 UED
深入理解Call-ID头字段的重要性
【8月更文挑战第24天】
219 0
|
7月前
mongoTemplate 嵌套对象包含id
mongoTemplate 嵌套对象包含id
66 0
|
7月前
|
存储 C++ 容器
在C++的set的作用类型
在C++的set的作用类型
50 0
|
iOS开发
id的本质
id的本质
72 1
|
存储 Rust 算法
有关'全局唯一id'
有关'全局唯一id'
83 0
|
SQL 数据采集 NoSQL
One ID中的核心技术ID-Mapping究竟是怎么实现的?
One ID中的核心技术ID-Mapping究竟是怎么实现的?