JPA注解 @GeneratedValue

@GeneratedValue`

JPA的@GeneratedValue注解,在JPA中,@GeneratedValue注解存在的意义主要就是为一个实体生成一个唯一标识的主键(JPA要求每一个实体Entity,必须有且只有一个主键),@GeneratedValue提供了主键的生成策略。
@GeneratedValue注解有两个属性,分别是strategygenerator,其中generator属性的值是一个字符串,默认为"",其声明了主键生成器的名称(对应于同名的主键生成器@SequenceGenerator@TableGenerator)。

@Target({METHOD, FIELD})
@Retention(RUNTIME)
public @interface GeneratedValue {
    GenerationType strategy() default AUTO;
    String generator() default "";
}

其中GenerationType :

public enum GenerationType { 
    //使用一个特定的数据库表格来保存主键。 
    TABLE, 
    //根据底层数据库的序列来生成主键,条件是数据库支持序列。 
    SEQUENCE,  
    //主键由数据库自动生成(主要是自动增长型) 
    IDENTITY, 
    //主键由程序控制。 
    AUTO
}

如果实体类表示的自动生成策略是 GenerationType.SEQUENCE ,需要和@SequenceGenerator配合使用

@Repeatable(SequenceGenerators.class)
@Target({TYPE, METHOD, FIELD}) 
@Retention(RUNTIME)
public @interface SequenceGenerator {
    //必填,主键生成器的名称,和@GeneratedValue的generator 属性所使用的,值必须保持一致
    String name();
    //数据库序列对象名称
    String sequenceName() default "";
    //序列生成器目录
    String catalog() default "";
    //序列生成器框架
    String schema() default "";
    //序列初始值
    int initialValue() default 1;
    //预先分配序列号的数目
    int allocationSize() default 50;
}

如果实体标识的自动生策略是 GenerationType.TABLE,需要和@TableGenerator配合使用

@Repeatable(TableGenerators.class)
@Target({TYPE, METHOD, FIELD}) 
@Retention(RUNTIME)
public @interface TableGenerator {
    //必填,主键生成器的名称,和@GeneratedValue的generator 属性所使用的,值必须保持一致
    String name();
    //表的名称
    String table() default "";
    //表的目录
    String catalog() default "";
    //表的架构
    String schema() default "";
    //主键字段的名称
    String pkColumnName() default "";
    //最后生成的值的列的名称。
    String valueColumnName() default "";
    //表中的主键字段的特征字符串值
    String pkColumnValue() default "";
    //ID的初始值
    int initialValue() default 0;
    //预先分配ID的数目
    int allocationSize() default 50;
    //表的唯一约束,除主键以外的其他的约束
    UniqueConstraint[] uniqueConstraints() default {};
    //表的索引,主键不需要指定,主键自动创建
    Index[] indexes() default {};
}

你可能感兴趣的:(JPA注解 @GeneratedValue)