@Id 和 @GeneratedValue 详解
@Id:
@Id 标注用于声明一个实体类的属性映射为数据库的主键列。(也就是标注字段是primary key)
@GeneratedValue:
@GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。
默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。
在javax.persistence.GenerationType中定义了以下几种可供选择的策略:
IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;
AUTO: JPA自动选择合适的策略,是默认选项;
SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式
TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。
也就是如果你没有指定strategy属性,默认策略是AUTO,JPA会根据你使用的数据库来自动选择策略,比如说我使用的是mysql则,自动的主键策略就是IDENTITY (auto increment)。
资料
Last updated