@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/