์ค๋ช
์์ ๊ฐ ์ ๋ต๊ณผ ๊ธฐ์ ์๋ ๊ณ ์ ํ ์ฅ์ ๊ณผ ๋จ์ ์ด ์์ต๋๋ค. ํน์ ์ ๋ต์ ์ ํํ๊ธฐ ์ํ ์ผ๋ฐ์ ์ธ ๊ถ์ฅ ์ฌํญ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
UNION ๊ธฐ๋ฐ TABLE_PER_CLASS ์ ๋ต
์ด ์ ๋ต์ ๋คํ์ฑ ์ฟผ๋ฆฌ ๋ฐ ์ฐ๊ฒฐ์ด ํ์ํ์ง ์์ ๊ฒฝ์ฐ์ ์ ํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค. ๊ฑฐ์ ์ํํ์ง ์๋ ๊ฒฝ์ฐ(๋๋ ์ ํ ์ํํ์ง ์๋ ๊ฒฝ์ฐ) "์ฌ์ฉ์ ์ฌ์ฉ์์์ ์ฌ์ฉ์ ์ ํ". User๋ฅผ ์ฐธ์กฐํ๋ Entity ํด๋์ค๊ฐ ์๋ ๊ฒฝ์ฐ ์ด๊ฒ์ด ์ต์ ์ ์ต์ ์ ๋๋ค(์ฌ์ ํ ์ต์ ํ๋ ๋คํ์ฑ ์ฟผ๋ฆฌ ๋ฐ ์ฐ๊ฒฐ์ ์ถ๊ฐํ ์ ์์ผ๋ฏ๋ก).
SINGLE_TABLE ์ ๋ต
์ด ์ ๋ต์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
a) ๋จ์ํ ์์ ์๋ง ํด๋น๋ฉ๋๋ค. ์ ๊ทํ ๋ฐ NOT NULL ์ ์ฝ ์กฐ๊ฑด์ด ์ค์ํ ์ํฉ์์๋ ์ ๋ต #3(JOINED)์ ์ ํธํด์ผ ํฉ๋๋ค. ์ด ๊ฒฝ์ฐ ์์์ ์์ ํ ํฌ๊ธฐํ๊ณ ์์์ผ๋ก ๋์ฒดํ ๊ฐ์น๊ฐ ์๋์ง ์๊ฐํ๋ ๊ฒ์ด ์ด์น์ ๋ง์ต๋๋ค.
b) ๋ฐํ์์ ๊ตฌ์ฒด์ ์ธ ํด๋์ค์ ๋์ ์ ์๋ฟ๋ง ์๋๋ผ ๋คํ์ฑ ์ฟผ๋ฆฌ ๋ฐ ์ฐ๊ฒฐ์ด ํ์ํ ๊ฒฝ์ฐ. ๋์์ ํ์ ํด๋์ค๋ ๋น๊ต์ ์ ์ ์์ ์ ํ๋๋ฅผ ์ ์ธํ๋ฉฐ ์์ ํด๋์ค์์ ์ฃผ์ ์ฐจ์ด์ ์ ๋์์ ์์ต๋๋ค.
๊ฒ๋ค๊ฐ DBA์ ์ง์งํ ๋ํ๋ฅผ ๋๋ด์ต๋๋ค.
์กฐ์ธ ์ ๋ต
์ด ์ ๋ต์ ์๋์ ์ ์ฝ ์ธก๋ฉด์์ ๊ฐ์ฅ ํจ์จ์ ์ ๋๋ค. ๋คํ์ฑ ์ฟผ๋ฆฌ ๋ฐ ์ฐ๊ฒฐ์ด ํ์ํ ๊ฒฝ์ฐ์ ์ ํฉํ์ง๋ง ํ์ ํด๋์ค๋ ๋น๊ต์ ๋ง์ ์ ํ๋๋ฅผ ์ ์ธํฉ๋๋ค.
์ฌ๊ธฐ์ ์ฃผ์ ์ฌํญ: JOINED์ TABLE_PER_CLASS ์ฌ์ด์ ๊ฒฐ์ ์๋ ์ค์ ๋ฐ์ดํฐ์ ๋ํ ์ฟผ๋ฆฌ ์คํ ๊ณํ์ ํ๊ฐ๊ฐ ํ์ํฉ๋๋ค. ์์ ๊ณ์ธต ๊ตฌ์กฐ์ ๋๋น์ ๊น์ด๋ก ์ธํด ์กฐ์ธ ๋น์ฉ(๋ฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ์ฑ๋ฅ)์ด ํ์ฉ๋์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ด์๋ ๋ณ๋๋ก ์์ ์ฃผ์์ ์ธํฐํ์ด์ค์ ์ ์ฉํ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค.
๋ช ๋ฐฑํ
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๊ณต์ ์คํ ๋ฆฌ์ง ์ ๋ต์ด ์๋ ์ํฐํฐ ํด๋์ค์ ๊ณ์ธต ๊ตฌ์กฐ๊ฐ ์๋ ์ํฉ๋ ์์ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ค ์ด์ ๋ก๋ ๊ธฐ๋ณธ ํด๋์ค์์ ์ฟผ๋ฆฌ๊ฐ ์ํ๋ ๋ ์ผ๋ถ ๊ณ์ธต ๊ตฌ์กฐ ํด๋์ค๊ฐ ๋ฐํ๋๋ ๊ฒ์ ์ํ์ง ์์ต๋๋ค.
์ด์ ๋ํ ์ฃผ์์ด ์์ต๋๋ค.
@Polymorphism(type = PolymorphismType.EXPLICIT)
ํด๋ผ์ด์ธํธ ํด๋์ค ์ ์ถ๊ฐํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค .
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
class User {
int id;
String name;
LocalDate birthday;
}
@Entity
class Employee extends User {
String occupation;
int salary;
LocalDate join;
}
@Entity
@Polymorphism(type = PolymorphismType.EXPLICIT)
class Client extends User {
String address;
}
๊ทธ๋ฐ ๋ค์ HQL ์ฟผ๋ฆฌ๋ ๊ธฐ๋ณธ ํด๋์ค๋ฅผ ์ฟผ๋ฆฌํ ๋ ์ด ํด๋์ค์ ๊ฐ์ฒด๋ฅผ ๋ฌด์ํฉ๋๋ค.
List<User> accounts = session.createQuery("from User").getResultList();
์ด ์ฟผ๋ฆฌ๋ User ๋ฐ Employee ๊ฐ์ฒด ๋ชฉ๋ก์ ๋ฐํ ํ์ง๋ง Client๋ ๋ฐํํ์ง ์์ต๋๋ค .
GO TO FULL VERSION