๋งคํ ์ด๊ฑฐํ
๊ธฐ๋ณธ ๋ฐ์ดํฐ ์ ํ์ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ์ด๋ฏธ ์์๋์ต๋๋ค. @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 ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ฃผ์์ ์ฌ์ ์ํ๋ฉด ๋ฉ๋๋ค .
๋๋ ๋น์ ์ด ์ด๊ฒ์ ์๊ธฐ๋ฅผ ์ํ์ง๋ง ์ฌ๊ธฐ์๋ ์์ธํ ๋ค๋ฃจ์ง ์์ ๊ฒ์ ๋๋ค. ๋๋ ์ด๊ฒ์ด ๋น์ ์ด ๋จธ๋ฆฌ๋ฅผ ๋ถ๋ฌ ๋จ๋ฆฌ๊ธฐ์ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ถ๊ธํ์ ๋ถ๋ค์ ์ํด ๊ณต์ ๋ฌธ์ ์ ๋ํ ๋งํฌ๋ฅผ ๋จ๊ธธ ์ ์์ต๋๋ค .
GO TO FULL VERSION