@Column
是属性或方法级别的注解,用于指定持久化属性映射到数据库表的列。如果没有指定列注释,则使用其默认值。
参数 |
类型 |
描述 |
name |
String |
列的名称,默认为属性的名称(Hibernate 映射列时,若遇到驼峰拼写,会自动添加 _ 连接并将大写字母改成小写)。 |
unique |
boolean |
列的值是否是唯一的。这是 @UniqueConstraint 注解的一个快捷方式, 实质上是在声明唯一约束。默认值为 false。 |
nullable |
boolean |
列的值是否允许为 null。默认为 true。 |
insertable |
boolean |
列是否包含在 INSERT 语句中,默认为 true。 |
updatable |
boolean |
列是否包含在 UPDATE 语句中,默认为 true。 |
columnDefinition |
String |
生成列的 DDL 时使用的 SQL 片段。默认使用推断的类型来生成 SQL 片段以创建此列。 |
table |
String |
当前列所属的表的名称。 |
length |
int |
列的长度,仅对字符串类型的列生效。默认为255。 |
precision |
int |
列的精度,仅对十进制数值有效,表示有效数值的总位数。默认为0。 |
scale |
int |
列的精度,仅对十进制数值有效,表示小数位的总位数。默认为0。 |
1. 示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| @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; }
|
产生的 DDL 语句(MySQL):
1 2 3 4 5 6 7 8 9
| CREATE 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 字段的精度控制没有生效,为了使其生效,将代码修改为:
1 2
| @Column(columnDefinition = "double(5, 2)") private double assets;
|
产生的 DDL 语句(MySQL):
1 2 3 4 5 6 7 8 9
| CREATE 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;
|