விளக்கம்
வகுப்பு படிநிலையை சேமிப்பதற்கான அடுத்த அணுகுமுறை, படிநிலையில் உள்ள அனைத்து வகுப்புகளையும் ஒரே அட்டவணையில் சேமிப்பதாகும் . இந்த மூலோபாயம் ஒற்றை அட்டவணை என்று அழைக்கப்படுகிறது .
உதாரணமாக, இது போன்றது:
CREATE TABLE user_ employee_client {
id INT,
name VARCHAR,
birthday DATE,
occupation VARCHAR,
salary INT,
join DATE,
address VARCHAR,
DTYPE VARCHAR
}
அதாவது, எங்களிடம் ஒரு அட்டவணை உள்ளது, அதில் எங்கள் படிநிலையின் அனைத்து வகுப்புகளுக்கான நெடுவரிசைகளும் வெவ்வேறு வண்ணங்களால் குறிக்கப்பட்டுள்ளன. ஒரு சிறப்பு சேவை நெடுவரிசை DTYPE VARCHAR உள்ளது , அங்கு ஹைபர்னேட் நிறுவன வகுப்பின் பெயரைச் சேமிக்கும்.
நிறுவன வகுப்புகளின் தரவு இப்போது ஒரு அட்டவணையில் தரவுத்தளத்தில் சேமிக்கப்பட்டுள்ளது என்பதை 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')
டேபிளில் தரவைச் சேமிக்கும் போது, ஹைபர்னேட் தனக்குத் தெரிந்த நிறுவனப் புலங்களை மட்டுமே அனுப்புகிறது. அதாவது குறிப்பிடப்படாத நெடுவரிசைகள் NULL ஆக இருக்கும்.
இதன் பொருள் என்னவென்றால், ஆக்கிரமிப்பு நெடுவரிசைக்கான NOT NULL வகையை நீங்கள் குறிப்பிட முடியாது, ஏனெனில் ஒரு கிளையன்ட் அதே அட்டவணையில் சேமிக்கப்படும் போது, அவரது தொழில் NULL ஆக இருக்கும். வெவ்வேறு நிறுவனங்களை ஒரே அட்டவணையில் சேமிப்பதில் உள்ள குறைபாடுகளில் இதுவும் ஒன்றாகும்.
SQL வினவலில் உள்ள கடைசி புலம் DTYPE நெடுவரிசை ஆகும், இதில் நிறுவன வகுப்பின் பெயர் உள்ளது. உங்கள் டேபிளிலிருந்து தரவைப் படிக்க விரும்பும் போது இது ஹைபர்னேட் மூலம் பயன்படுத்தப்படுகிறது.
உதாரணமாக:
List<User> accounts = session.createQuery("from User").list();
இந்த வினவல் தரவுத்தளத்தில் சேமிக்கப்பட்டுள்ள அனைத்து பயனர் வகை பொருட்களின் பட்டியலை வழங்கும்: பயனர், பணியாளர் மற்றும் வாடிக்கையாளர். DTYPE நெடுவரிசையின் அடிப்படையில், உட்பொருளின் வகை சரியாக நிர்ணயிக்கப்பட்டு, சரியான வகுப்பின் பொருள் உருவாக்கப்படும்.
எங்கள் விஷயத்தில், கணக்குகள் பட்டியலில் இரண்டு பொருள்கள் இருக்கும்: ஒரு பணியாளர் வகை மற்றும் ஒரு கிளையன்ட் வகை.
HQL விதிகள்.
GO TO FULL VERSION