@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 "";
}
lstrategy属性表示生成主键的策略。有四种类型,分别定义在枚举类型GenerationType中,该枚举类型的值如下所示。
public enum GenerationType { TABLE, SEQUENCE, IDENTITY, AUTO };
其中,默认为AUTO自动生成。
lgenerator为不同策略类型所对应的生成的规则名,它的值根据不同的策略有不同的设置。
l能够标识为主键的属性类型,如表所列举的几种。
表@Id标识的数据类型
分类
类型
Java的基本数据类型
byteintshortlongchar
Java基本数据类型对应的封装类
ByteIntegerShortLongCharacter
大数值型类
java.math.BigInteger
字符串类型
String
时间日期型
java.util.Datejava.sql.Date
doublefloat浮点类型和它们对应的封装类不能作为主键,这是因为判断是否唯一是通过equals方法来判断的,浮点型的精度太大,不能够准确的匹配。