์ค๋์ Entity๋ฅผ ์์ฑํ๋ฉฐ ๊ฒช์ ์ด์์ธ
Spring Boot JPA์์ Enum ์ปฌ๋ผ ๋งคํํ ๋ ๋ฐ์ํ๋ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ์ ๋ํด ์ ๋ฆฌํด๋ณด์๋ค.
โ๏ธ ์ฒ์ ์ฝ๋์์ ์๋ฌ ๋ฐ์
@Column(name = "status", nullable = false)
private OrderStatusEnum status = OrderStatusEnum.PENDING;
- Hibernate๊ฐ Enum์ ์ด๋ป๊ฒ ๋ณํํด์ผ ํ ์ง ๋ชฐ๋ผ IllegalArgumentException์ด ๋ฐ์ํ๋ค.
- ๊ธฐ๋ณธ์ ์ผ๋ก Hibernate๊ฐ ORDINAL(์ซ์)๋ก ์ ์ฅํ๋ คํด์ DBํ์ ๊ณผ ์ถฉ๋ํ๋ค.
โ๏ธ @Enumerated(EnumType.STRING) ์ถ๊ฐ
@Enumerated(EnumType.STRING)
@Column(name = "status", nullable = false)
private OrderStatusEnum status = OrderStatusEnum.PENDING;
- EnumType.STRING ์ ์ถ๊ฐํ๋ฉด Enum ๊ฐ์ด DB์ ๋ฌธ์์ด๋ก ์ ์ฅ๋ ์ ์๋ค.
- ํ์ง๋ง ํน์ DB์์๋ ์ฌ์ ํ Enum์ ์ ๋๋ก ์ธ์ํ์ง ๋ชป ํ ์ ์๊ณ , ๋ ๋ํ ํด๊ฒฐํ์ง ๋ชปํ๋ค.
โ๏ธ ์ต์ข ํด๊ฒฐ (JdbcTypeCode ์ถ๊ฐ)
@Enumerated(EnumType.STRING)
@Column(name = "status", nullable = false)
@JdbcTypeCode(SqlTypes.NAMED_ENUM)
private OrderStatusEnum status = OrderStatusEnum.PENDING;
- @JdbcTypeCode(SqlTypes.NAMED_ENUM)์ ์ถ๊ฐํ๋ฉด Hibernate๊ฐ Enum์ ๋ ๋ช ํํ๊ฒ ์ธ์ํ๊ณ , DB์ ๋งคํํ ์ ์๋ค.
- ์ด๋ ๊ฒ ํ๋ฉด ์์ ์ ์ผ๋ก Enum์ ์ ์ฅํ ์ ์๋ค!
์์ ํธ๋ฌ๋ธ์ํ ์ด์ง๋ง, ํด๋น ์ด์๋ฅผ ๊ฒช์ผ๋ฉด์ Hibernate๊ฐ Enum์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ๋์ง ์กฐ๊ธ ๋ ๊น์ด ์ดํดํ ์ ์์๋ค.
์์ผ๋ก๋ Enum type ๋งคํ๋๋ฌธ์ ์๊ธฐ๋ ๋ฌธ์ ๋ ๋ฏธ๋ฆฌ ์๋ฐฉํ ์ ์์ ๊ฒ ๊ฐ๋ค!