वर्णन

वर्ग पदानुक्रम संचयित करण्याचा पुढील दृष्टीकोन म्हणजे पदानुक्रमातील सर्व वर्ग एकाच टेबलमध्ये संग्रहित करणे . या धोरणाला सिंगल टेबल म्हणतात .

उदाहरणार्थ, यासारखे:

CREATE TABLE user_ employee_client {
  id INT,
  name VARCHAR,
  birthday DATE,
  occupation VARCHAR,
  salary INT,
  join DATE,
  address VARCHAR,
  DTYPE VARCHAR
}

म्हणजेच, आमच्याकडे एक टेबल आहे, ज्यामध्ये आमच्या पदानुक्रमाच्या सर्व वर्गांचे स्तंभ वेगवेगळ्या रंगांनी चिन्हांकित केले आहेत. एक विशेष सेवा स्तंभ DTYPE VARCHAR देखील आहे , जेथे हायबरनेट एंटिटी वर्गाचे नाव संग्रहित करेल.

एंटिटी क्लासेसचा डेटा आता डेटाबेसमध्ये एका टेबलमध्ये संग्रहित केला आहे हे हायबरनेटला स्पष्ट करणे बाकी आहे. हे @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 नियम.