SQL 테이블에 직접 정의하는 것과 마찬가지로 엔터티에 기본 속성을 부여하겠다.
default 컬럼 값을 지정하는 첫번째 방법은 엔터티의 속성값으로 직접 부여하는 것이다.
@Entity
public class User {
@Id
private Long id;
private String firstName = "John Snow";
private Integer age = 25;
private Boolean locked = false;
}
이제 new 연산자로 새 엔터티를 생성할 때마다 우리가 부여한 기본 값이 지정될 것이다.
@Test
void saveUser_shouldSaveWithDefaultFieldValues() {
User user = new User();
user = userRepository.save(user);
assertEquals(user.getName(), "John Snow");
assertEquals(user.getAge(), 25);
assertFalse(user.getLocked());
}
이 방식에는 한가지 단점이 있다.
SQL 테이블 정의에는 default 값이 지정되어 있지 않다.
create table user
(
id bigint not null constraint user_pkey primary key,
name varchar(255),
age integer,
locked boolean
);
그러므로 null로 오버라이드 하면 엔터티는 에러 없이 저장될 것이다.
@Test
void saveUser_shouldSaveWithNullName() {
User user = new User();
user.setName(null);
user.setAge(null);
user.setLocked(null);
user = userRepository.save(user);
assertNull(user.getName());
assertNull(user.getAge());
assertNull(user.getLocked());
}
SQL 테이블 정의에서 직접 default 값을 생성하려면 @Column 어노테이션을 사용하여 columnDefinition 매개변수에 지정할 수 있다.
@Entity
public class User {
@Id
Long id;
@Column(columnDefinition = "varchar(255) default 'John Snow'")
private String name;
@Column(columnDefinition = "integer default 25")
private Integer age;
@Column(columnDefinition = "boolean default false")
private Boolean locked;
}
이 메소드를 사용하면 SQL 테이블 정의에 default 값이 표시된다.
create table user
(
id bigint not null constraint user_pkey primary key,
name varchar(255) default 'John Snow',
age integer default 35,
locked boolean default false
);
@Test
void saveUser_shouldSaveWithDefaultSqlValues() {
User user = new User();
user = userRepository.save(user);
assertEquals(user.getName(), "John Snow");
assertEquals(user.getAge(), 25);
assertFalse(user.getLocked());
}
이 메소드를 사용하면 엔터티를 처음 저장할 때 column을 null로 지정할 수 없다. 아무 값도 제공하지 않는다면 자동적으로 default 값이 지정된다.