1. 程式人生 > >JPA @Column 註解

JPA @Column 註解

@Column是屬性或方法級別的註解,用於指定持久化屬性對映到資料庫表的列。如果沒有指定列註釋,則使用其預設值。

引數型別描述
nameString列的名稱,預設為屬性的名稱(Hibernate 對映列時,若遇到駝峰拼寫,會自動新增_連線並將大寫字母改成小寫)。
uniqueboolean列的值是否是唯一的。這是@UniqueConstraint註解的一個快捷方式, 實質上是在宣告唯一約束。預設值為 false。
nullableboolean列的值是否允許為 null。預設為 true。
insertableboolean列是否包含在INSERT語句中,預設為 true。
updatableboolean列是否包含在UPDATE語句中,預設為 true。
columnDefinitionString生成列的 DDL 時使用的 SQL 片段。預設使用推斷的型別來生成 SQL 片段以建立此列。
tableString當前列所屬的表的名稱。
lengthint列的長度,僅對字串型別的列生效。預設為255。
precisionint列的精度,僅對十進位制數值有效,表示有效數值的總位數。預設為0。
scaleint列的精度,僅對十進位制數值有效,表示小數位的總位數。預設為0。

1. 示例

12345678910111213141516171819202122232425@Entity(name = "person")public
class Person implements Serializable { @Id @GeneratedValue private Long id; @Column(nullable = false, length = 32) private String name; @Column(length = 128) private String mail; @Column(columnDefinition = "char(11) NOT NULL") private String phone; @Column(precision = 5
, scale = 2) private BigDecimal salary; @Column(precision = 5, scale = 2) private double assets; // getters and setters}

產生的 DDL 語句(MySQL):

123456789CREATE TABLE `person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `assets` double NOT NULL, `mail` varchar(128) DEFAULT NULL, `name` varchar(32) NOT NULL, `phone` char(11) NOT NULL, `salary` decimal(5,2) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;

可以看出,salary 欄位的精度控制生效了,但對於double型別的 assets 欄位的精度控制沒有生效,為了使其生效,將程式碼修改為:

12@Column(columnDefinition = "double(5, 2)")private double assets;

產生的 DDL 語句(MySQL):

123456789CREATE TABLE `person` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `assets` double(5,2) DEFAULT NULL, `mail` varchar(128) DEFAULT NULL, `name` varchar(32) NOT NULL, `phone` char(11) NOT NULL, `salary` decimal(5,2) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;