పరిరక్షణ సమస్యలు

ఈ రోజు మనం ఒక కొత్త మరియు సూపర్ ఆసక్తికరమైన స్కీమ్‌ను కలిగి ఉంటాము - డేటాబేస్‌లో క్లాస్ సోపానక్రమాన్ని సేవ్ చేయడానికి హైబర్నేట్ ఫీచర్‌లను ఉపయోగిస్తాము.

తరగతి శ్రేణి అనేది వారసత్వ సంబంధం ద్వారా ఒకదానికొకటి సంబంధించిన తరగతుల సమితి.

మీరు డేటాబేస్లో నిల్వ చేయాలనుకుంటున్న మూడు తరగతులు మీకు ఉన్నాయని ఊహించండి:

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లో డేటాబేస్ ప్రశ్నను వ్రాయలేరు మరియు వినియోగదారులందరి జాబితాను పొందలేరు: వినియోగదారు, ఉద్యోగి, క్లయింట్.