పరిరక్షణ సమస్యలు
ఈ రోజు మనం ఒక కొత్త మరియు సూపర్ ఆసక్తికరమైన స్కీమ్ను కలిగి ఉంటాము - డేటాబేస్లో క్లాస్ సోపానక్రమాన్ని సేవ్ చేయడానికి హైబర్నేట్ ఫీచర్లను ఉపయోగిస్తాము.
తరగతి శ్రేణి అనేది వారసత్వ సంబంధం ద్వారా ఒకదానికొకటి సంబంధించిన తరగతుల సమితి.
మీరు డేటాబేస్లో నిల్వ చేయాలనుకుంటున్న మూడు తరగతులు మీకు ఉన్నాయని ఊహించండి:
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లో డేటాబేస్ ప్రశ్నను వ్రాయలేరు మరియు వినియోగదారులందరి జాబితాను పొందలేరు: వినియోగదారు, ఉద్యోగి, క్లయింట్.
GO TO FULL VERSION