6.1 ์๋ฒ์ ํ์ผ ์ ์ฅ
์ด์ง ๊ฐ์ฒด๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ํ์ผ์ ๋๋ค. ํ์ผ์ด ํฌ๋ฉด ๋์คํฌ์ ๋ณ๋ ํด๋์ ์ ์ฅํ๊ณ ๊ฒฝ๋ก๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๊ฒ์ด ๊ฐ์ฅ ํฉ๋ฆฌ์ ์ ๋๋ค. ์:
c:\db-files\users\12355\avatar.jpg
๊ทธ๋ฆฌ๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์๋ ํ์ผ์ ๋ํ ์๋ ๊ฒฝ๋ก๋ง ์ ์ฅํฉ๋๋ค.
\12355\avatar.jpg
URL์ ์ฝ๊ฒ ์ป์ ์ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด ํธ๋ฆฌํฉ๋๋ค.
https://storage.codegym.cc/users/12355/avatar.jpg
์๋ฒ ์ด๋ฆ์ ๋ํ ์๋ ๊ฒฝ๋ก๋ฅผ ๋ถ์ฌ๋ฃ๊ธฐ๋ง ํ๋ฉด ์๋ฃ๋ฉ๋๋ค.
6.2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ด๋ฏธ์ง ์ ์ฅ
๊ทธ๋ฌ๋ ๊ทธ๋ฆผ์ด ์์ ๊ฒฝ์ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ ์ฅํ๊ณ ๋ฐ์ดํธ ์งํฉ์ผ๋ก ํด๋ผ์ด์ธํธ์ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ SQL์๋ ํน๋ณํ BLOB ๋ฐ์ดํฐ ์ ํ ์ธ Binary Large Object๊ฐ ์์ต๋๋ค. ๋๋ ์คํ๋ ค ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค.
- CLOB - ๋ฌธ์ ๋ํ ๊ฐ์ฒด,
- BLOB - ์ด์ง ๋ํ ๊ฐ์ฒด.
CLOB๋ ๋งค์ฐ ํฐ ํ ์คํธ๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. BLOB๋ ์์ ์ฌ์ง, ๋น๋์ค ๋ฑ๊ณผ ๊ฐ์ ์ด์ง ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
์:
@Entity
@Table(name="user")
public class User {
@Id
private String id;
@Column(name = "name", columnDefinition="VARCHAR(128)")
private String name;
@Lob
@Column(name = "photo", columnDefinition="BLOB")
private byte[] photo;
// ...
}
์ฃผ์์ Large Object๊ฐ@Lob
ํ๋์ ์ ์ฅ๋์ด ์์ ์ Hibernate์๊ฒ ์๋ ค์ค๋๋ค . ๊ทธ๋ฆฌ๊ณ ์ด๋ฏธ ๋ชจ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค.columnDefinition="BLOB"
์ ์ฌ์ฉ์์ ๊ทธ์ ์ฌ์ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ์์ ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
byte[] imageBuffer = Files.readAllBytes(Paths.get("C:/temp/avatar.png"))
User user = new User();
user.setId("1");
user.setName("Zapp");
user.setPhoto(imageBuffer);
session.persist(user);
6.3 XML๊ณผ JSON
Hibernate๋ JSON์ ๋ฐ์ดํฐ ์ ํ์ผ๋ก ํฅ๋ฏธ๋กญ๊ฒ ์ง์ํฉ๋๋ค. ๋ฌธ์์ด์ HashMap์ ๋จ์ผ JSON ๊ฐ์ฒด๋ก ์ ์ฅํ ์ ์์ต๋๋ค. DBMS๊ฐ JSON๊ณผ ํจ๊ป ์๋ํ ์ ์๋ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@JdbcTypeCode(SqlTypes.JSON)
private Map<String, String> properties;
Hibernate๋ ์ ํ ๊ฐ์ฒด๊ฐ Map<String, String>
๋จ์ผ JSON ๊ฐ์ฒด๋ก ์ง๋ ฌํ๋๋๋ก ๊ด๋ฆฌํฉ๋๋ค. ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๊ฐ์ฒด๋ฅผ ์ฝ์ ๋ JSON ๊ฐ์ฒด๋ฅผ Map<String, String>
.
Hibernate๋ XML๋ก ๋น์ทํ ๊ฒ์ ํ ์ ์์ต๋๋ค:
@JdbcTypeCode(SqlTypes.SQLXML)
private Map<String, String> properties;
GO TO FULL VERSION