더미 데이터 insert (Feat. @DynamicInsert 와 Enum)
Entity 생성하고
username, password, email만 집어넣었다.
id는 auto increment고, createDate은 @CreationTimestamp 어노테이션 달아놨으니 userRepository.save(user);
될 때 자동으로 현재 시간이 저장될 것이고, role은 @ColumnDefault("'user'") 해놨으니 user로 들어가겠지?!
❓❓❓❓❓❓❓❓❓❓
role이 NULL 이다..?
💡
Hibernate:
insert
into
User
(createDate, email, password, role, username)
values
(?, ?, ?, ?, ?)
- id는 auto_increment라서 insert에 없어도 상관없다.
위의 코드처럼 작성한다면 role의 values에 ? -> null 이 들어간다.
role의 기본 값인 user 값으로 insert 되려면,
Hibernate:
insert
into
User
(createDate, email, password, username)
values
(?, ?, ?, ?)
쿼리가 이렇게 생겨야 한다.
그러기 위해서는 User Entity에 @DynamicInsert 어노테이션을 붙여야 한다. 그러면 insert 할 때 null인 필드를 JPA가 제외시켜준다.
null 대신 user가 잘 들어가있다!
Hibernate:
insert
into
User
(createDate, email, password, username)
values
(?, ?, ?, ?)
내가 원했던 것처럼 쿼리에도 role이 잘 생략되어 있고..
@DynamicInsert 어노테이션을 붙여 해결하였지만, 나중에는 끝도 없이 어노테이션을 계속 사용해야 될 것이다.
🎈 더 좋은 방법이 있다 !!
Enum을 사용하자!
그러면 User Entity의 role은 아래처럼 바꿔야 한다.
@Enumerated(EnumType.STRING) // DB에는 RoleType이라는게 없어서 이걸 붙여줘야함
private RoleType role;
Enum으로 만들면 실수를 줄일 수 있다. Enum은 주로 데이터의 도메인을 만들 때 사용한다.
- 도메인이란 !
어떤 데이터의 범위 이다. (예: 남/여, 유저/관리자, ...)
Author And Source
이 문제에 관하여(더미 데이터 insert (Feat. @DynamicInsert 와 Enum)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rladuswl/데이터베이스-NULL-Feat.-DynamicInsert-와-Enum저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)