@Id
@GeneratedValue
private Long id;
@Column(nullable = false, unique = true)
private String userName;
@Column(nullable = false)
private String passWord;
@Column(nullable = false, unique = true)
private String email;
@Column(nullable = true, unique = true)
private String nickName;
@Column(nullable = false)
private String regTime;
/*
16 * 主键
17 * 生成策略为自动增长
18 * 唯一、长度为20
19 */
20 @Id
21 @GeneratedValue
22 @Column(name = "goods_id", unique = true, nullable = false, length = 20)
@Id:

@Id 标注用于声明一个实体类的属性映射为数据库的主键列。该属性通常置于属性声明语句之前,可与声明语句同行,也可写在单独行上。

@GeneratedValue:

@GeneratedValue 用于标注主键的生成策略,通过strategy 属性指定。默认情况下,JPA 自动选择一个最适合底层数据库的主键生成策略:SqlServer对应identity,MySQL 对应 auto increment。

在javax.persistence.GenerationType中定义了以下几种可供选择的策略:

–IDENTITY:采用数据库ID自增长的方式来自增主键字段,Oracle 不支持这种方式;

–AUTO: JPA自动选择合适的策略,是默认选项;

–SEQUENCE:通过序列产生主键,通过@SequenceGenerator 注解指定序列名,MySql不支持这种方式

–TABLE:通过表产生主键,框架借由表模拟序列产生主键,使用该策略可以使应用更易于数据库移植。

指定字段“monthly_income”月收入的类型为double型,精度为12位,小数点位数为2位。

private BigDecimal monthlyIncome;

@Column(name="monthly_income",precision=12, scale=2)

字段值为只读的,不允许插入和修改。通常用于主键和外键。

private Integer id;

@Column(name="id",insertable=false,updatable=false)

name

name属性定义了被标注字段在数据库表中所对应字段的名称;

unique

unique属性表示该字段是否为唯一标识,默认为false。如果表中有一个字段需要唯一标识,则既可以使用该标记,也可以使用@Table标记中的@UniqueConstraint。

nullable

nullable属性表示该字段是否可以为null值,默认为true。

insertable

insertable属性表示在使用“INSERT”脚本插入数据时,是否需要插入该字段的值。

updatable

updatable属性表示在使用“UPDATE”脚本插入数据时,是否需要更新该字段的值。insertable和updatable属性一般多用于只读的属性,例如主键和外键等。这些字段的值通常是自动生成的。

columnDefinition

columnDefinition属性表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。(也就是说,如果DB中表已经建好,该属性没有必要使用。)

table

table属性定义了包含当前字段的表名。

length

length属性表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符。

precision和scale

precision属性和scale属性表示精度,当字段类型为double时,precision表示数值的总长度,scale表示小数点所占的位数。