/** * @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);