์ปฌ๋ ์ ๋ชฉ๋ก
์ง๊ธ๊น์ง ๊ฐ๋จํ ์ ํ์ ๋งคํํ๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด์์ต๋๋ค. ์ด์ ์ข ๋ ํฅ๋ฏธ๋ก์ด ์ง๋ฌธ์ธ ๊ฐ์ฒด ์ปฌ๋ ์ ์ ๋งคํํ๋ ๋ฐฉ๋ฒ์ผ๋ก ๋์ด๊ฐ ์๊ฐ์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ฅผ 5๊ฐ ๊ทธ๋ฃน์ผ๋ก ๊ฐ์ง ์ ์์ต๋๋ค.
- ๋ฐฐ์ด - ๊ฐ์ฒด์ ๋ฐฐ์ด
- ๋ชฉ๋ก - ๊ฐ์ฒด ๋ชฉ๋ก
- ์ธํธ - ๊ฐ์ฒด ์ธํธ
- ์ง๋ - ๊ฐ์ฒด ์ฌ์
- ์ปฌ๋ ์ - ๊ฐ์ฒด์ ์ปฌ๋ ์
์ปฌ๋ ์ ํ๋๊ฐ ์๋ ํด๋์ค์ ์:
@Entity
@Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@magical-annotation
public List messages;
}
๊ทธ๋ ๋ค๋ฉด ํ๋์ ํ๋๊ฐ ์๋๋ผ ๋ง์ ๊ฐ์ ์ ์ฅํ ์ ์๊ฒ ํด์ฃผ๋ ์ด ๋ง๋ฒ ๊ฐ์ ์ฃผ์์ ๋ฌด์์ ๋๊น?
์ด ์ฃผ์์ @ElementCollection ์ด๋ผ๊ณ ํฉ๋๋ค . ์:
@Entity
@Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@ElementCollection
public List<String> messages;
}
๋งค์ฐ ๊ฐ๋จํ๊ฒ ์์ฑ๋์์ง๋ง ์ฌ์ํ์ง ์๊ฒ ์๋ํฉ๋๋ค.
๋ณด์กฐ ํ ์ด๋ธ
๋ง์ ์์๋ฅผ ํฌํจํ๊ณ @ElementCollection ์ฃผ์ ์ผ๋ก ํ์๋ Entity ํด๋์ค์ ๋ชจ๋ ํ๋๋ ํน์ ๋ณด์กฐ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํฌํจ๋ฉ๋๋ค. ์ฌ์ค ๋ ผ๋ฆฌ์ ์ ๋๋ค.
์ด ํ ์ด๋ธ์๋ ๋ ๊ฐ์ง ํ์์ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ ์ ์์ต๋๋ค.
- Ordered (List, Map)์๋ ์ธ ๊ฐ์ ์ด์ด ์์ต๋๋ค.
- ํค ์ด (์ธ๋ ํค) โ ์์ ๊ฐ์ฒด์ ID์ ๋ํ ์ฐธ์กฐ์ ๋๋ค.
- ์ธ๋ฑ์ค ์ด - ์ปฌ๋ ์ ์ ์์น/์ธ๋ฑ์ค์ ๋๋ค.
- ์์ ์ด - ๊ฐ.
- ์ ๋ ฌ๋์ง ์์ (์ธํธ)์๋ ๋ ๊ฐ์ ์ด์ด ์์ต๋๋ค.
- ํค ์ด (์ธ๋ ํค) โ ์์ ๊ฐ์ฒด์ ID์ ๋ํ ์ฐธ์กฐ์ ๋๋ค.
- ์์ ์ด - ๊ฐ.
์ฃผ์์ ์ฌ์ฉํ์ฌ ์ด ํ ์ด๋ธ์ ์ด๋ฆ์ ๋ช ์์ ์ผ๋ก ์ค์ ํ ์๋ ์์ต๋๋ค.
@CollectionTable(name="table_name")
์:
@Entity
@Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@ElementCollection
@CollectionTable(name="user_message")
public List<String> messages;
}
์ค์ํ! @CollectionTable ์ฃผ์์ด ์ง์ ๋์ง ์์ ๊ฒฝ์ฐ Hibernate๋ ํด๋์ค ์ด๋ฆ๊ณผ ํ๋ ์ด๋ฆ(User ํด๋์ค ๋ฐ ํ๋ ์ด๋ฆ)์ ๊ธฐ๋ฐ์ผ๋ก ํ ์ด๋ธ ์ด๋ฆ ์์ฒด๋ฅผ ๋น๋ํฉ๋๋ค.๋ฉ์์งํ ์ด๋ธ ์ด๋ฆ์ "User_messages"๋ก ์ง์ ํฉ๋๋ค.
์ปฌ๋ ์ ์ปฌ๋ ์
๊ทธ๋ฌ๋ ๋ณด์กฐ ํ ์ด๋ธ์ ์์ฑ์ Hibernate์ ๋งก๊ธฐ์ง ๋ง๊ณ ์ง์ ์์ฑํ๋๋ก ํฉ์๋ค. ๋จผ์ ๋ ๊ฐ์ ์ด์ด ์๋ ํ ์ด๋ธ์ ๋ง๋ค์ด์ผ ํฉ๋๋ค.
CREATE TABLE user_message {
user_id INT,
message VARCHAR(255)
};
์ด ํ ์ด๋ธ์๋ ๊ณ ์ ํ id-column์ด ์์ต๋๋ค. ์ด๊ฒ์ด ๋ณด์กฐ ํ ์ด๋ธ์ ์ฃผ์ ๊ธฐ๋ฅ์ ๋๋ค. ๋์ค์ ๋ค๋ฅธ ์ ํ์ ๋ณด์กฐ ํ ์ด๋ธ์ ๋ํด ์๊ฒ ๋ ๊ฒ์ ๋๋ค.
์ด์ ์ด ํ ์ด๋ธ์ ํ๋์ ๋งคํํด์ผ ํฉ๋๋ค.๋ฉ์์ง์ฌ์ฉ์ ํด๋์ค ์์ . ์ด๊ฒ์ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ๊ฒ์ ๋๋ค:
@Entity
@Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@ElementCollection
@CollectionTable(name="user_message", joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "message")
public Set<String> messages;
}
์ฌ๊ธฐ์ ๋ ๊ฐ์ง์ ์ฃผ๋ชฉํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
์ฒซ์งธ, @Column(name = "message") ์ฃผ์ ์ผ๋ก ์ง์ ๋ ๋ฉ์์ง ์ด์ user ํ ์ด๋ธ์ด ์๋๋ผ user_message ๋ณด์กฐ ํ ์ด๋ธ์ ์์ต๋๋ค.
๋์งธ, @JoinColumn(name = "user_id") ์ฃผ์์์ ์ฌ์ฉ์ ํ ์ด๋ธ์ id๋ฅผ ์ฐธ์กฐํ๋ user_id ์ด์ ์ด๋ฆ์ ์ง์ ํ์ต๋๋ค. ์ด๊ฒ์ Hibernate๊ฐ ๊ทธ๊ฒ๋ค์ ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ์ ์๊ธฐ ์ํจ์ ๋๋ค.
์์ง
๋ชฉ๋ก ๋๋ ๋ฐฐ์ด์ ์ ๋ ฌ๋ ์์๋ฅผ ๋ณด์กฐ ํ ์ด๋ธ์ ์ ์ฅํ๋ ค๋ฉด ์ธ ๊ฐ์ ์ด์ด ์๋ ํ ์ด๋ธ์ด ํ์ํฉ๋๋ค.
CREATE TABLE user_message {
user_id INT,
index INT,
message VARCHAR(255)
};
์ด ์ด๋ฆ "์ธ๋ฑ์ค"๊ฐ ๋ง์์ ๋ค์ง ์๊ฑฐ๋ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒฝ์ฐ ๋งคํ ์ค์ ๋ค๋ฅธ ์ด๋ฆ์ ์ง์ ํ ์ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ ค๋ฉด @Index ์ฃผ์์ ์ฌ์ฉํด์ผ ํฉ๋๋ค .
์:
@Entity
@Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@ElementCollection
@CollectionTable(name="user_message",
indexes = { @Index(columnList = "list_index") }
joinColumns = @JoinColumn(name = "user_id"))
@Column(name = "message")
public List<String> messages;
}
์ง๋ ์์ง
๋ง์ง๋ง์ผ๋ก ์ปฌ๋ ์ ๋ฟ๋ง ์๋๋ผ HashMap๋ ์ ์ฅํ๊ณ ์ถ๊ณ ์ด๋ฅผ ์ํด ๋ณด์กฐ ํ ์ด๋ธ์ ๋ ๊ฐ์ ์ด์ด ํ์ํฉ๋๋ค.
CREATE TABLE user_message {
user_id INT,
key VARCHAR(255),
message VARCHAR(255)
};
Map์ ํค๋ฅผ ์ง์ ํ๋ ค๋ฉด @MapKeyColumn ์ฃผ์์ด ํ์ํฉ๋๋ค .
์:
@Entity
@Table(name="user")
class User {
@Id
@Column(name="id")
public Integer id;
@ElementCollection
@CollectionTable(name="user_message", joinColumns = @JoinColumn(name = "user_id"))
@MapKeyColumn(name = "key")
@Column(name = "message")
public Map<String, String> messages;
}
์์ธํ ๋ด์ฉ์ ๊ณต์ ๋ฌธ์์์ ํ์ธํ ์ ์์ต๋๋ค .
GO TO FULL VERSION