从零开始 Spring Boot 51:JPA 中的默认列值
JPA 是一个 ORM 框架,因此,通常我们需要在实体类中定义表结构,这其中就包含可能的字段默认值。
本文介绍如何在 Hibernate(JPA)中设置默认列值(Default Column Value)。
默认属性值
最简单的方式是对实体类指定一个默认的属性值,比如:
@Data
@Table(name = "USER_TREE")
@Entity
public class Tree {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(nullable = false)
private Integer age = 5;
}
测试用例:
@Test
void testAddTreeWithDefaultValue(){
Tree tree = new Tree();
treeRepository.save(tree);
Assertions.assertEquals(5, tree.getAge());
}
这样做的缺点是由 Hibernate 自动生成的表结构中并不会体现字段的默认值:
CREATE TABLE `user_tree` (
`id` bigint NOT NULL,
`age` int NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
一般来说是不会产生什么影响的,但如果我们直接在数据库中执行 INSERT SQL,并且期望对拥有默认值的字段使用缺省,就无法实现。
columnDefinition
通过@Column
的columnDefinition
属性,我们可以指定表结构的字段定义,可以利用这一点指定 DDL 语句中的字段默认值:
@Data
@Table(name = "USER_TEACHER")
@Entity
public class Teacher {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
priv