संवर्धन समस्या

आज आमच्याकडे एक नवीन आणि अतिशय मनोरंजक योजना आहे - डेटाबेसमध्ये वर्ग पदानुक्रम जतन करण्यासाठी हायबरनेट वैशिष्ट्यांचा वापर करून.

वर्ग पदानुक्रम हा वारसा संबंधाने एकमेकांशी संबंधित वर्गांचा संच आहे.

कल्पना करा की तुमच्याकडे तीन वर्ग आहेत जे तुम्हाला डेटाबेसमध्ये साठवायचे आहेत:

class User {
  int id;
  String name;
  LocalDate birthday;
}
class Employee extends User {
 	String occupation;
 	int salary;
 	LocalDate join;
}
class Client extends User {
   String address;
}

वर्ग एकमेकांकडून वारशाने मिळतात. आणि सर्वात मनोरंजक गोष्ट अशी आहे की डेटाबेसमध्ये या वर्गांच्या वस्तू संग्रहित करण्यासाठी तुम्हाला हायबरनेट वापरायचे आहे.

उपाय प्रकार

हायबरनेटमध्ये 4 संभाव्य मार्ग आहेत जे ते डेटाबेसमधील टेबलसह वर्ग पदानुक्रम संबद्ध करू शकतात:

  • मॅप केलेले सुपरक्लास
  • एकच टेबल
  • टेबलमध्ये सामील झाले
  • प्रति वर्ग टेबल

प्रत्येक रणनीती डेटाबेसमध्ये स्वतःची सारणी रचना गृहीत धरते. कधीकधी ते खूप जटिल असतात. परंतु त्यांना HQL साठीच्या प्रश्न खूप सोप्या आहेत. हेच प्रकरण आहे जेथे हायबरनेटचे फायदे स्पष्टपणे प्रकट होतात.

मी कधीही रशियन भाषेत अनुवादित केलेल्या या संज्ञा ऐकल्या नाहीत, म्हणून मी त्यांचा इंग्रजीमध्ये उच्चार करण्याची देखील शिफारस करतो.

खाली आम्ही त्या प्रत्येकाचा अर्थ काय याचे विश्लेषण करू.

@MappedSuperClass

चला सर्वात सोप्या उपायाने सुरुवात करूया - डेटाबेसमध्ये तुमच्याकडे प्रत्येक वर्गासाठी स्वतंत्र टेबल्स आहेत . उदाहरणार्थ, हे:

CREATE TABLE user {
  id INT,
  name VARCHAR,
  birthday DATE
}
CREATE TABLE employee {
  id INT,
  name VARCHAR,
  birthday DATE,
  occupation VARCHAR,
  salary INT,
  join DATE
}
CREATE TABLE client {
  id INT,
  name VARCHAR,
  birthday DATE,
  address VARCHAR
}

फक्त तुम्हाला माहीत आहे की या सारण्यांचे वर्ग पदानुक्रमाने जोडलेले आहेत . तुम्हाला हायबरनेटने याबद्दल देखील जाणून घ्यायचे असल्यास, तुम्हाला पालक वर्गात @MappedSuperclass भाष्य जोडणे आवश्यक आहे . त्याशिवाय, हायबरनेट केवळ पालक वर्गाच्या फील्ड आणि भाष्यांकडे दुर्लक्ष करेल.

या भाष्यासह वर्ग यासारखे दिसतील:

@MappedSuperclass
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;
}

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

HQL मधील डेटाबेस क्वेरी फक्त त्या घटकास परत करतील ज्याचा प्रकार स्पष्टपणे निर्दिष्ट केला आहे. तुम्ही HQL मध्ये डेटाबेस क्वेरी लिहू शकत नाही आणि सर्व वापरकर्त्यांची यादी मिळवू शकत नाही: वापरकर्ता, कर्मचारी, क्लायंट.