@Column
@Column的作用是来标识实体类中属性与数据表中字段的对应关系,其代码定义如下:
@Target({ElementType.METHOD, ElementType.FIELD}) @Retention(RetentionPolicy.RUNTIME) public @interface Column { String name() default ""; // 定义了该属性字段在数据库表中所对应字段的名称 boolean unique() default false; //表示该字段是否为唯一标识,默认为false boolean nullable() default true; //表示该字段是否可以为null值,默认为true boolean insertable() default true; //表示在使用“INSERT”脚本插入数据时,是否允许插入该字段的值 boolean updatable() default true; //表示在使用“UPDATE”脚本插入数据时,是否允许更新该字段的值. String columnDefinition() default ""; //表示创建表时,该字段创建的SQL语句,一般用于通过Entity生成表定义时使用。 String table() default ""; //定义了包含当前字段的表名,缺省值时默认该字段存在于主表下 int length() default 255; // 表示字段的长度,当字段的类型为varchar时,该属性才有效,默认为255个字符 int precision() default 0; //表示数值的总长度 int scale() default 0; //表示小数点所占的位数 }
insertable 和 updateble应用
一般多用于只读的属性或者自动生成的字段,例如主键
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "user_id",insertable = false,updatable = false) private Long id;
注:下面的应用基于通过Entity定义生成表的策略,主要观察其注解设置对SQL的影响
nullable,unique, name, length 应用
@Column(nullable = false, unique = true,name = "user_name",length = 100) private String userName;
precision 和 scale 应用
@Column(name="income", precision=12, scale=3) private BigDecimal income;
Javaee8文档:https://javaee.github.io/javaee-spec/javadocs/