์ค๋ช
ํด๋์ค ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ์ ์ฅํ๋ ๋ค์ ์ ๊ทผ ๋ฐฉ์์ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ชจ๋ ํด๋์ค๋ฅผ ๋จ์ผ ํ ์ด๋ธ์ ์ ์ฅํ๋ ๊ฒ ์ ๋๋ค . ์ด ์ ๋ต์ ๋จ์ผ ํ ์ด๋ธ ์ด๋ผ๊ณ ํฉ๋๋ค .
์๋ฅผ ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CREATE TABLE user_ employee_client {
id INT,
name VARCHAR,
birthday DATE,
occupation VARCHAR,
salary INT,
join DATE,
address VARCHAR,
DTYPE VARCHAR
}
์ฆ, ๊ณ์ธต ๊ตฌ์กฐ์ ๋ชจ๋ ํด๋์ค์ ๋ํ ์ด์ด ๋ค๋ฅธ ์์์ผ๋ก ํ์๋๋ ํ๋์ ํ ์ด๋ธ์ด ์์ต๋๋ค. Hibernate๊ฐ Entity ํด๋์ค์ ์ด๋ฆ์ ์ ์ฅํ ํน์ ์๋น์ค ์ด DTYPE VARCHAR ๋ ์์ต๋๋ค .
์ด์ Entity ํด๋์ค์ ๋ฐ์ดํฐ๊ฐ ํ๋์ ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋์ด ์์์ Hibernate์ ์ค๋ช ํ๋ ์ผ๋ง ๋จ์์ต๋๋ค. ์ด๋ @Inheritance ์ฃผ์์ ์ฌ์ฉํ์ฌ ์ํํ ์ ์์ต๋๋ค .
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
์ฐ๋ฆฌ ์์ ์ ์:
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Entity
class User {
int id;
String name;
LocalDate birthday;
}
@Entity
class Employee extends User {
String occupation;
int salary;
LocalDate join;
}
@Entity
class Client extends User {
String address;
}
๋ฐ์ดํฐ ์ ์ฅ ๋ฐฉ๋ฒ
์ด์ ๋ ๊ฐ์ ์ํฐํฐ๋ฅผ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๋ ์์ ๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค.
Employee employee = new Employee();
employee.id = 101;
employee.name = "Ivanov";
employee.birthday = LocalDate.of("01-01-1999");
employee.occupation = "Programmer"
employee.salary = 100000;
employee.join = LocalDate.of("12-01-2018");
session.persist(employee);
Client client = new Client();
client.id = 102;
client.name = "Petrov";
client.birthday = LocalDate.of("15-11-1988");
client.address = "Shandara";
session.persist(client);
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ ๋ ๋ค์ SQL ์ฟผ๋ฆฌ๊ฐ ์คํ๋ฉ๋๋ค.
INSERT INTO user_ employee_client (id, name, birthday, occupation, salary, join, DTYPE)
VALUES (101, 'Ivanov', '01-01-1999', 'Programmer', 100000, '12-01-2018', 'Employee')
INSERT INTO user_ employee_client (id, name, birthday, address, DTYPE)
VALUES (102, 'Petrov', '15-11-1988', 'Shandara', 'Client')
๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ์ ์ ์ฅํ ๋ Hibernate๋ ์๋ ค์ง ์ํฐํฐ ํ๋๋ง ์ ๋ฌํฉ๋๋ค. ์ฆ, ์ง์ ๋์ง ์์ ์ด์ NULL์ด ๋ฉ๋๋ค.
์ด๋ ํด๋ผ์ด์ธํธ๊ฐ ๋์ผํ ํ ์ด๋ธ์ ์ ์ฅ๋ ๋ ๊ทธ์ ์ง์ ์ด NULL์ด ๋๊ธฐ ๋๋ฌธ์ ์ง์ ์ด์ ๋ํด NOT NULL ์ ํ์ ์ง์ ํ ์ ์์์ ์๋ฏธํฉ๋๋ค. ์ด๋ ๋์ผํ ํ ์ด๋ธ์ ์๋ก ๋ค๋ฅธ ์ํฐํฐ๋ฅผ ์ ์ฅํ๋ ๋จ์ ์ค ํ๋์ ๋๋ค.
SQL ์ฟผ๋ฆฌ์ ๋ง์ง๋ง ํ๋๋ Entity ํด๋์ค์ ์ด๋ฆ์ ํฌํจํ๋ DTYPE ์ด์ ๋๋ค. ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ผ๋ ค๊ณ ํ ๋ Hibernate์์ ์ฌ์ฉํฉ๋๋ค.
์:
List<User> accounts = session.createQuery("from User").list();
์ด ์ฟผ๋ฆฌ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ๋ ๋ชจ๋ ์ฌ์ฉ์ ์ ํ ๊ฐ์ฒด(User, Employee ๋ฐ Client)์ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค. DTYPE ์ด์ ๊ธฐ๋ฐ์ผ๋ก ์ํฐํฐ ์ ํ์ด ์ฌ๋ฐ๋ฅด๊ฒ ๊ฒฐ์ ๋๊ณ ์ฌ๋ฐ๋ฅธ ํด๋์ค์ ๊ฐ์ฒด๊ฐ ์์ฑ๋ฉ๋๋ค.
์ฐ๋ฆฌ์ ๊ฒฝ์ฐ ๊ณ์ ๋ชฉ๋ก์๋ Employee ์ ํ๊ณผ Client ์ ํ์ ๋ ๊ฐ์ฒด๊ฐ ์์ต๋๋ค.
HQL ๊ท์น.
GO TO FULL VERSION