๋งคํ•Œ ์—ด๊ฑฐํ˜•

๊ธฐ๋ณธ ๋ฐ์ดํ„ฐ ์œ ํ˜•์„ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ด๋ฏธ ์•Œ์•„๋ƒˆ์Šต๋‹ˆ๋‹ค. @Column ์ฃผ์„ ๊ณผ @Type ์ฃผ์„์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค . ๊ทธ๋Ÿฌ๋‚˜ ์ด๋Ÿฌํ•œ ์ฃผ์„์œผ๋กœ ๋ชจ๋“  ๊ฒฝ์šฐ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋Š” enum ์ž…๋‹ˆ๋‹ค .

Java enum ๊ฐ์ฒด๋Š” ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ์ˆซ์ž๋กœ
  • ๋ฌธ์ž์—ด๋กœ

enum์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ค์ •๋˜๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์ƒ‰์ƒ์„ ๊ฐ–๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ์ž‘์„ฑํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

enum Color {
   RED,
   ORANGE,
   YELLOW,
   GREEN,
   BLUE,
   VIOLET
}

User ํด๋ž˜์Šค ์— ์ƒ‰์ƒ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค .

@Entity
@Table(name="user")
class User
{
   @Column(name="id")
   public Integer id;

   @Column(name="favorite_color")
   public Color favoriteColor;

   @Column(name="created_date")
   public Date createdDate;
}

Hibernate๊ฐ€ Color ์œ ํ˜•์„ ๊ธฐ๋ณธ์— ์ˆซ์ž๋กœ ์ €์žฅํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ํ•„๋“œ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.์ข‹์•„ํ•˜๋Š” ์ƒ‰์ฃผ์„ ์ถ”๊ฐ€:

@Enumerated(EnumType.ORDINAL)

๊ฐ’์„ ๋ฌธ์ž์—ด๋กœ ์ €์žฅํ•˜๋ ค๋ฉด ์ฃผ์„์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@Enumerated(EnumType.STRING)

์˜ˆ:

@Entity
@Table(name="user")
class User
{
   @Column(name="id")
   public Integer id;

   @Enumerated(EnumType.ORDINAL) //value will be saved to the base as a number
   @Column(name="favorite_color")
   public Color favoriteColor;

   @Column(name="created_date")
   public Date createdDate;
}

๋งคํ•Œ ๋ถ€์šธ

๋‘ ๋ฒˆ์งธ ์œ ์šฉํ•œ ์‹œ๋‚˜๋ฆฌ์˜ค๋Š” ๋ถ€์šธ ์œ ํ˜• ๋งคํ•‘์ž…๋‹ˆ๋‹ค. ์—ญ์‚ฌ์ ์œผ๋กœ SQL์—๋Š” Boolean์— ๋Œ€ํ•œ ๊ณ ์œ ํ•œ ๋ฐ์ดํ„ฐ ์œ ํ˜•์ด ์—†๊ณ  ๋Œ€์‹  ๊ฑฐ๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒƒ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์„ธ โ€‹โ€‹๊ฐ€์ง€ ์˜ต์…˜์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • 1 ๋˜๋Š” 0
  • '์—ํ”„' ๋˜๋Š” 'ํ‹ฐ'
  • 'Y' ๋˜๋Š” 'N'

์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒ ์ด์Šค๋ฅผ ๋””์ž์ธํ•  ์˜ˆ์ •์ด๋ผ๋ฉด ๋ฐ”๋กœ BIT ํƒ€์ž…์„ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ์Œ, ์ „์ฒด ๋งคํ•‘์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@Column(name = "is_correct", columnDefinition = "BIT")
@Type(type = "org.hibernate.type.NumericBooleanType")
    private Boolean isCorrect;

๊ธ€์Ž„์š”, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ์œ„์˜ ํ‘œ๋ฅผ ๋ณด๊ณ  ํ•„์š”ํ•œ ์œ ํ˜•์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋งคํ•‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด ๋ณด์‹ญ์‹œ์˜ค.

๊ณ„์‚ฐ๋œ ํ•„๋“œ

๋•Œ๋•Œ๋กœ ์—”ํ‹ฐํ‹ฐ ํด๋ž˜์Šค์˜ ํ•„๋“œ ์ˆ˜์™€ ํ…Œ์ด๋ธ”์˜ ์—ด ์ˆ˜๊ฐ€ ์ผ์น˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ์ด์œ ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๊ฒฝ์šฐ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅํ•˜๊ณ  ์‹ถ์ง€ ์•Š์€ Entity ํด๋ž˜์Šค์˜ ์ผ๋ถ€ ํ•„๋“œ๊ฐ€ ์žˆ์„ ๋•Œ์ž…๋‹ˆ๋‹ค . ์ด๊ฒƒ์œผ๋กœ ๋ชจ๋“  ๊ฒƒ์ด ๋ช…ํ™•ํ•ฉ๋‹ˆ๋‹ค - ๊ทธ๋Ÿฌํ•œ ํ•„๋“œ์— @Transient ์ฃผ์„์„ ์ถ”๊ฐ€ํ•˜๋ฉด Hibernate๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ์ž‘์—…ํ•  ๋•Œ ๊ทธ๊ฒƒ์„ ๋ฌด์‹œํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ˆ:

@Entity(name = "Square")
public class Square {
           	@Id
           	public Long id;

           	public Integer width;

           	public Integer height;

           	@Transient
           	public Integer total;
}

์ด๋Š” ์ข‹์€ ์˜ต์…˜์ด์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐœ์ฒด๋ฅผ ์ฝ์„ ๋•Œ ํ•ฉ๊ณ„ ํ•„๋“œ๊ฐ€ null์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋„ˆ๋น„*๋†’์ด์˜ ๊ณฑ์„ ํฌํ•จํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ Hibernate์—์„œ๋„ ํ–‰ํ•ด์งˆ ์ˆ˜ ์žˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ @Formula ์ฃผ์„์ด ์žˆ์Šต๋‹ˆ๋‹ค .

@Entity(name = "Square")
public class Square {
           	@Id
           	public Long id;

           	public Integer width;

           	public Integer height;

           	@Formula(value = " width * height ")
          	public Integer total;
}

์ด๋Ÿฌํ•œ ํ•„๋“œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๊ฐœ์ฒด๋ฅผ ์ฝ์„ ๋•Œ ์ˆ˜์‹์œผ๋กœ ๊ณ„์‚ฐ๋œ ๊ฐ’์ด ์—ฌ๊ธฐ์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค.

SQL ์ฟผ๋ฆฌ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

 SELECT id, width, height, (width* height) AS total FROM Square;

@์ž„๋ฒ ๋””๋“œ

๋˜ ๋‹ค๋ฅธ ์œ ์šฉํ•œ ์ฃผ์„์€ @Embedded ์ž…๋‹ˆ๋‹ค . ํ•˜์œ„ ๊ฐœ์ฒด์˜ ํ•„๋“œ๋ฅผ Entity ํด๋ž˜์Šค ์ž์ฒด์˜ ํ•„๋“œ๋กœ ๊ฐ„์ฃผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

User ํด๋ž˜์Šค๊ฐ€ ์žˆ๊ณ  ์—ฌ๊ธฐ์— ์ฃผ์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค .

@Entity
@Table(name="user")
class User
{
   @Column(name="id")
    public Integer id;

   @Column(name="user_address_country")
   public String country;
   @Column(name="user_address_city")
   public String city;
   @Column(name="user_address_street")
   public String street;
   @Column(name="user_address_home")
   public String home;

   @Column(name="created_date")
    public Date createdDate;
}

๋ชจ๋“  ๊ฒƒ์ด ๊ดœ์ฐฎ์€ ๊ฒƒ ๊ฐ™์ง€๋งŒ Java์˜ ๊ด€์ ์—์„œ ๋ณผ ๋•Œ ์ฃผ์†Œ๋ฅผ ๋ณ„๋„์˜ ํด๋ž˜์Šค์— ๋„ฃ๋Š” ๊ฒƒ์ด ๋…ผ๋ฆฌ์ ์ž…๋‹ˆ๋‹ค. ์ฃผ์†Œ๋Š” ์—ฌ์ „ํžˆ ๋ณ„๋„์˜ ์—”ํ„ฐํ‹ฐ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜์ด ๋ชจ๋“  ์ •๋ณด๊ฐ€ ์‚ฌ์šฉ์ž ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒํ•ฉ๋‹ˆ๊นŒ?

@Embedded ์ฃผ์„์ด ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค . ๋จผ์ € UserAddress ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉ์ž ์ฃผ์†Œ์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๋ฅผ ์—ฌ๊ธฐ์— ๋„ฃ์Šต๋‹ˆ๋‹ค.

@Embeddable
class UserAddress
{
   @Column(name="user_address_country")
   public String country;
   @Column(name="user_address_city")
   public String city;
   @Column(name="user_address_street")
   public String street;
   @Column(name="user_address_home")
   public String home;
}

๊ทธ๋Ÿฐ ๋‹ค์Œ User ํด๋ž˜์Šค ์—์„œ ์ด ํด๋ž˜์Šค์˜ ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค .

@Entity
@Table(name="user")
class User
{
   @Column(name="id")
   public Integer id;

   @Embedded
   public UserAddress address;

   @Column(name="created_date")
   public Date createdDate;
}

@Embedded ์ฃผ์„ ๋•๋ถ„์— ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•  ๋•Œ Hibernate๋Š” UserAddress ํด๋ž˜์Šค์˜ ํ•„๋“œ๊ฐ€ User ํด๋ž˜์Šค ์ž์ฒด ์˜ ํ•„๋“œ๋กœ ์ทจ๊ธ‰๋˜์–ด์•ผ ํ•จ์„ ์ดํ•ดํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค .

์ค‘์š”ํ•œ! ๋‘ ๊ฐœ์˜ UserAddress ํ•„๋“œ๋ฅผ User ํด๋ž˜์Šค์— ์ถ”๊ฐ€ํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ @Embedded๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋” ์ด์ƒ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ค‘๋ณต ํ•„๋“œ๊ฐ€ ์ƒ๊ธฐ๊ณ  ์–ด๋–ป๊ฒŒ๋“  ๊ตฌ๋ถ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. @AttributeOverrides ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์„์„ ์žฌ์ •์˜ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค .

๋‚˜๋Š” ๋‹น์‹ ์ด ์ด๊ฒƒ์„ ์•Œ๊ธฐ๋ฅผ ์›ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ๋Š” ์ž์„ธํžˆ ๋‹ค๋ฃจ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋‹น์‹ ์ด ๋จธ๋ฆฌ๋ฅผ ๋ถ€๋Ÿฌ ๋œจ๋ฆฌ๊ธฐ์— ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ถ๊ธˆํ•˜์‹  ๋ถ„๋“ค์„ ์œ„ํ•ด ๊ณต์‹ ๋ฌธ์„œ ์— ๋Œ€ํ•œ ๋งํฌ๋ฅผ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค .