@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方法来判断的,浮点型的精度太大,不能够准确的匹配。