columnDefinition屬性的使用:
@Table(name = "CUSTOMERS") @Entity public class Customer { @Column(name = "ID") @GeneratedValue(strategy = GenerationType.AUTO) @Id private Integer id; @Column(name = "Name") private String name; @Column(name = "Email",columnDefinition="varchar(128) not null") private String email; @Column(name = "Age") private int age; ...... }
數據庫DDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(128) NOT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
columnDefinition可以指定創建表時一些SQL語句,比如這里可以一次性指定,varchar長度128,且不能為空
當然,相同的結果可以通過nullable和length屬性結合實現
@Table(name = "CUSTOMERS") @Entity public class Customer { @Column(name = "ID") @GeneratedValue(strategy = GenerationType.AUTO) @Id private Integer id; @Column(name = "Name") private String name; @Column(name = "Email", nullable = true, length = 128) private String email; @Column(name = "Age") private int age; ...... }
數據庫DDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(128) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
columnDefinition屬性的特殊使用:
編程語言中字符串一般都用String表示,但是數據庫中varcahr數值類型有長度限制,一旦需要大文本,則需要text數值類型
但是String類型默認映射的數值類型是varchar,columnDefinition可以進行額外指定
@Table(name = "CUSTOMERS") @Entity public class Customer { @Column(name = "ID") @GeneratedValue(strategy = GenerationType.AUTO) @Id private Integer id; @Column(name = "Name") private String name; @Column(name = "Email", nullable = true, length = 128) private String email; @Column(name = "Age") private int age; @Column(name = "Remark",columnDefinition="text") private String remark; ...... }
數據庫DDL:
CREATE TABLE `customers` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `Age` int(11) DEFAULT NULL, `Email` varchar(128) DEFAULT NULL, `Name` varchar(255) DEFAULT NULL, `Remark` text, PRIMARY KEY (`ID`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;
remark列數值類型是text,而Name和Email默認是varcahr