/** * @javax.persistence.Column(name="xxx",unique=false,nullable=true) 指定當前屬性所要映射字段 * name 表中所對應字段的名稱【默認值:與屬性名一致】 * unique 該字段是否為唯一約束字段 【默認值 FALSE】 * nullable 能否為null值 【默認值:TRUE】 * insertable insert 語句是否要包含該字段 【默認值:TRUE】 * updatable update 語句是否要包含該字段 【默認值:TRUE】 * length 【只對 String 有效】字段的長度【默認長度:255】 * precision 當字段類型為 double 時,precision表示數值的總長度 * scale 當字段類型為 double 時,scale表示小數位數 * columnDefinition 聲明建表語句, * @Column(columnDefinition = "varchar(32) not null") * 默認情況下 String轉varchar,如果想要轉BLOB或TEXT,需要手動指定:@Column(columnDefinition="text") * * insertable 和 updatable 屬性一般多用於只讀的屬性,例如主鍵和外鍵等。這些字段的值通常是自動生成的,而且不能修改 */
看以下舉例:
默認方式,不使用 @Column
// 默認方式創建字段 ,不使用 @Column private String name;【創建的字段】 name varchar(255) DEFAULT NULL,
使用@Column
@Column(name = "userName", length = 32 ,unique = true) // 駝峰命名 轉 下划線【JPA 默認方式】 private String name;【創建的字段】 user_name varchar(32) DEFAULT NULL, UNIQUE KEY `UK_2kehtjb1w395oq5vtys8e79u1` (`user_name`)
創建 text 類型字段
/** * @javax.persistence.Lob * 將當前屬性映射成數據庫的大對象類型,clob 或 blog * @javax.persistence.Basic * clob or blob 內存空間比較大,通常使用延遲加載的方式,即 fetch = FetchType.LAZY * * 默認情況下 String 轉 varchar ,如果想要轉 blob 或 text ,需要手動指定 columnDefinition="text" */ @Lob @Basic(fetch = FetchType.LAZY) @Column(name = "content",columnDefinition = "text") private String content;【創建的字段】 content text
創建小數類型字段
// 對 Float,Double 數據類型: precision , scale 不起作用
@Column(precision = 5,scale = 2) private Double price; -- 【創建的字段】 price double DEFAULT NULL @Column(precision = 5,scale = 2) private Float price; -- 【創建的字段】 price float DEFAULT NULL// 對 BigDecimal: precision , scale 起作用 @Column(precision = 5,scale = 2) private BigDecimal price; -- 【創建的字段】 price decimal(5,2) DEFAULT NULL// 建議使用 columnDefinition 創建小數,使用這種方式時 Java 數據類型可以任意 Double , Float @Column(columnDefinition = "decimal(5,2)") private Double price; -- 【創建的字段】 price decimal(5,2) DEFAULT NULL
創建整數類型
// 默認長度 11 private Integer age1; -- 【創建的字段】 age1 int(11) DEFAULT NULL // 修改長度 // 只能使用 columnDefinition 方式修改 // 因為 @Column(length = 3) 屬性對數字不起作用 @Column(columnDefinition = "int(3)" ) private Integer age2; -- 【創建的字段】age2 int(3) DEFAULT NULL
時間 和 Boolean
/** * 在數據庫創建的字段: is_show bit(1) DEFAULT NULL * true 對應的值 1 * false 對應的值 0 */ private Boolean isShow; /** * 在數據庫創建的字段:create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP * 當《新增》一條記錄時 ,由數據庫來自動為 createTime 賦值為當前時間【即,由數據庫來維護 createTime 】 * insertable = false , updatable = false 表示當 Hibernate 執行 insert , update 語句時 ,語句里不會出現 createTime * 由數據庫來維護的字段使用 insertable = false ,updatable = false 是非常合理的 */ @Column(columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP",insertable = false,updatable = false) private Timestamp createTime; /** * 在數據庫創建的字段:update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP * 當《新增》或《修改》記錄時 ,由數據庫來自動為 updateTime 賦值為當前時間【即,由數據庫來維護 updateTime 】 * insertable = false , updatable = false 表示當 Hibernate 執行 insert , update 語句時 ,語句里不會出現 updateTime * 由數據庫來維護的字段使用 insertable = false ,updatable = false 是非常合理的 */ @Column(columnDefinition="TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP",insertable = false,updatable = false) private Timestamp updateTime;【測試:新增數據】創建時間 和 修改時間 由數據庫自動賦值為當前時間 Test t = new Test(); t.setIsShow(true); dao.save(t);【測試:修改數據】修改時間 由數據庫自動修改成當前時間 Test t = new Test(); t.setId(1); t.setIsShow(false); dao.update(t);