๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐฑ์—”๋“œ/ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

JPA์—์„œ Enum ์ปฌ๋Ÿผ ์ œ๋Œ€๋กœ ์ €์žฅํ•˜๊ธฐ

by sh119 2025. 2. 21.

์˜ค๋Š˜์€ 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 ๋งคํ•‘๋•Œ๋ฌธ์— ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๋Š” ๋ฏธ๋ฆฌ ์˜ˆ๋ฐฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™๋‹ค!