@Id用于标记属性的主键,该注释的属性定义如下。
@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface Id {}
一旦标注了主键,该实体属性的值可以指定,也可以根据一些特定的规则自动生成。这就涉及到另一个标记@GeneratedValue标记的使用。
@GeneratedValue用于主键的生成策略,该注释的属性定义如下。
@Target({METHOD, FIELD}) @Retention(RUNTIME)
public @interface GeneratedValue {
GenerationType strategy() default AUTO;
String generator() default "";
}
l strategy属性表示生成主键的策略。有四种类型,分别定义在枚举类型GenerationType中,该枚举类型的值如下所示。
public enum GenerationType { TABLE, SEQUENCE, IDENTITY, AUTO };
其中,默认为AUTO自动生成。
l generator为不同策略类型所对应的生成的规则名,它的值根据不同的策略有不同的设置。
l 能够标识为主键的属性类型,如表所列举的几种。
表 @Id标识的数据类型
|
分类 |
类型 |
|
Java的基本数据类型 |
byte, int, short, long, char |
|
Java基本数据类型对应的封装类 |
Byte, Integer, Short, Long, Character, |
|
大数值型类 |
java.math.BigInteger |
|
字符串类型 |
String |
|
时间日期型 |
java.util.Date, java.sql.Date |
double和float浮点类型和它们对应的封装类不能作为主键,这是因为判断是否唯一是通过equals方法来判断的,浮点型的精度太大,不能够准确的匹配。
本文介绍@Id和@GeneratedValue注解的使用方法,包括主键生成策略及支持的数据类型。

1266

被折叠的 条评论
为什么被折叠?



