더미 데이터 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은 주로 데이터의 도메인을 만들 때 사용한다.

  • 도메인이란 !
    어떤 데이터의 범위 이다. (예: 남/여, 유저/관리자, ...)

좋은 웹페이지 즐겨찾기