రాష్ట్రాల జాబితా

మరియు ఇప్పుడు వినోదం ప్రారంభమవుతుంది. మేము ఎంటిటీ వస్తువుల స్థితులను అధ్యయనం చేస్తాము. మీరు ప్రతిదానికీ మరియు హైబర్నేట్‌ని ఉపయోగించడం కోసం కూడా చెల్లించాలి. HQL నేర్చుకోవడం అంత ధర అని మీరు అనుకోలేదా? లేదు, జీవితం కొంచెం క్లిష్టంగా ఉంది.

మీరు హైబర్నేట్‌ని ఉపయోగించి డేటాబేస్‌లో సేవ్ చేయగల రకమైన ఎంటిటీ ఆబ్జెక్ట్‌ని కలిగి ఉంటే, హైబర్నేట్ కోణం నుండి, ఈ వస్తువుకు నాలుగు రాష్ట్రాలు ఉండవచ్చు:

  • క్షణికమైనది
  • నిరంతర (లేదా నిర్వహించబడిన)
  • వేరుచేసిన
  • తీసివేయబడింది

మరియు మీకు ఆసక్తి కలిగించడానికి, నేను ఈ ఉపన్యాసానికి ఈ చిత్రాన్ని జోడిస్తాను:

క్షణికమైనది

వాస్తవానికి, సూక్ష్మ నైపుణ్యాలు లేకుండా కానప్పటికీ, ప్రతిదీ కనిపించే దానికంటే చాలా సులభం. ఉదాహరణకు, మీరు జావా కోడ్‌ని ఉపయోగించి స్పష్టంగా సృష్టించిన మరియు హైబర్నేట్ ఉపయోగించి డేటాబేస్ నుండి లోడ్ చేయని ప్రతి ఎంటిటీ ఆబ్జెక్ట్ తాత్కాలిక (పారదర్శక) స్థితిని కలిగి ఉంటుంది.

EmployeeEntity employee = new EmployeeEntity();

తాత్కాలిక స్థితి అంటే హైబర్‌నేట్‌కు ఈ వస్తువు గురించి తెలియదు మరియు ఆబ్జెక్ట్‌పై ఎటువంటి చర్య హైబర్నేట్‌ను ప్రభావితం చేయదు లేదా ఈ వస్తువుపై హైబర్నేట్ పని చేయదు.

అటువంటి వస్తువులను POJO - ప్లెయిన్ ఓల్డ్ జావా ఆబ్జెక్ట్ అని కూడా అంటారు . ఈ పదాన్ని తరచుగా గమ్మత్తైన ప్రవర్తనతో వివిధ వస్తువులకు వ్యతిరేక పదంగా ఉపయోగిస్తారు. మోకిటో సృష్టించిన Moc వస్తువులు గుర్తున్నాయా? ఇక్కడ అవి POJO కాదు.

కొన్ని క్లయింట్ కోడ్ తాత్కాలిక స్థితితో ఉన్న వస్తువుతో పని చేస్తే, వారి పరస్పర చర్యను చాలా సాధారణ పథకం ద్వారా వివరించవచ్చు:

పెర్సిస్టెంట్ లేదా మేనేజ్డ్

తదుపరి అత్యంత సాధారణ కేసు హైబర్నేట్ ఇంజిన్‌కు సంబంధించిన వస్తువులు. వారి స్థితిని పెర్సిస్టెంట్ (లేదా మేనేజ్డ్) అంటారు. ఈ స్థితితో వస్తువును పొందడానికి సరిగ్గా రెండు మార్గాలు ఉన్నాయి:

  • హైబర్నేట్ నుండి వస్తువును లోడ్ చేయండి.
  • హైబర్నేట్‌లో వస్తువును సేవ్ చేయండి.

ఉదాహరణలు:

Employee employee = session.load(Employee.class, 1);
Employee employee = new Employee ();
session.save(employee);

అటువంటి వస్తువు సాధారణంగా డేటాబేస్లో ఒక రకమైన రికార్డుకు అనుగుణంగా ఉంటుంది, దీనికి ID మరియు ఇలాంటివి ఉన్నాయి. ఈ వస్తువు హైబర్నేట్ సెషన్‌కు జోడించబడింది మరియు సాధారణంగా నిజమైన వస్తువు ద్వారా కాకుండా ఒక రకమైన ప్రాక్సీ ద్వారా సూచించబడుతుంది.

సెషన్.లోడ్() పద్ధతికి కాల్ చేసిన తర్వాత, మీరు కొంత స్టబ్ ఆబ్జెక్ట్ (ప్రాక్సీ)ని తిరిగి పొందే అవకాశం ఉంది మరియు ఈ ఆబ్జెక్ట్ యొక్క పద్ధతులను కాల్ చేసిన తర్వాత మాత్రమే డేటాబేస్‌కు అన్ని కాల్‌లు నిర్వహించబడతాయి. కానీ మేము అలాంటి వివరాల గురించి కొంచెం తరువాత మాట్లాడుతాము.

మరియు క్లయింట్ కోడ్ యొక్క పరస్పర చర్య మరియు నిర్వహించబడిన స్థితిలో ఉన్న వస్తువు క్రింది చిత్రంతో వివరించబడుతుంది:

వేరుచేసిన

సెషన్ నుండి వస్తువు వేరు చేయబడినప్పుడు తదుపరి స్థితి. అంటే, ఆబ్జెక్ట్ ఒకసారి హైబర్నేట్ సెషన్‌కు జోడించబడితే, సెషన్ మూసివేయబడింది లేదా లావాదేవీ ముగిసింది మరియు హైబర్నేట్ ఈ వస్తువును పర్యవేక్షించదు.

ఉదాహరణ:

session.close();
session.evict(entity);

మొదటి ఉదాహరణలో, సెషన్ మూసివేయబడింది. రెండవ సందర్భంలో, మేము evict() పద్ధతిని ఉపయోగించి సెషన్ నుండి ఆబ్జెక్ట్‌ను వేరు చేయాలనుకుంటున్నామని మేము స్పష్టంగా సూచించాము .

కొత్త కోడ్-ఆబ్జెక్ట్ ఇంటరాక్షన్ స్కీమ్ ఇలా ఉంటుంది:

మరియు ఇక్కడ ఇది ఆసక్తికరంగా ఉంటుంది. మీ వస్తువు హైబర్నేట్ నుండి పొందబడి ఉంటే, మీకు నిజమైన వస్తువుకు బదులుగా ప్రాక్సీ ఇవ్వబడి ఉండవచ్చు. మరియు ఈ ప్రాక్సీ ఆబ్జెక్ట్, సెషన్ నుండి డిస్‌కనెక్ట్ చేసిన తర్వాత, దాని పద్ధతులు పిలిచినప్పుడు మినహాయింపులను విసిరివేస్తుంది.

హైబర్నేట్‌తో పనిచేసేటప్పుడు ఇది ప్రారంభకులకు అత్యంత సాధారణ సమస్య. మీరు ఎంటిటీ ఆబ్జెక్ట్‌తో పని చేస్తున్నప్పుడు ఇలాంటి ప్రశ్నలకు సమాధానం ఏ సమయంలోనైనా ఖచ్చితంగా తెలుసుకోవాలి :

  • మీకు నిజమైన వస్తువు ఉందా లేదా నిజమైన వస్తువు నుండి కేవలం ప్రాక్సీ ఉందా?
  • మీరు ప్రస్తుతం లావాదేవీలో ఉన్నారా లేదా?
  • ఇది రీడ్-రైట్ లావాదేవీనా లేదా చదవడానికి మాత్రమే లావాదేవీనా?
  • వస్తువు LazyLoading మెకానిజం ద్వారా నిర్వహించబడుతుందా?
  • ఆబ్జెక్ట్‌లోని ఏ భాగాలు ఇప్పటికే మెమరీలోకి లోడ్ చేయబడ్డాయి మరియు యాక్సెస్ చేసినప్పుడు ఏ భాగాలు లోడ్ చేయబడతాయి?
  • మీ వస్తువు ఆధారిత వస్తువులతో ఎలా కనెక్ట్ చేయబడింది?

శుభవార్త ఏమిటంటే ఇది చాలా వరకు స్పష్టంగా ఉంటుంది. కానీ ఇది హుడ్ కింద ఎలా పనిచేస్తుందో మీరు ఇంకా అర్థం చేసుకోవాలి. డిక్లరేటివ్ ప్రోగ్రామింగ్ అంటే ఏమిటి - మీరు 10 నిమిషాల్లో కోడ్ రాయవచ్చు, అది ఎందుకు పని చేయకూడదో అర్థం చేసుకోండి - 10 గంటల్లో :)

తీసివేయబడింది

మరియు మీ ఎంటిటీ ఆబ్జెక్ట్ కలిగి ఉండే చివరి స్థితి తీసివేయబడింది. మీరు బహుశా దాని పేరు నుండి ఇప్పటికే ఊహించినట్లుగా, ఇది రిమోట్ వస్తువు యొక్క స్థితి.

మీరు డేటాబేస్ నుండి కొంత వస్తువును తొలగిస్తే, జావా ఆబ్జెక్ట్ వెంటనే ఎక్కడా కనిపించదు అనే వాస్తవం కారణంగా ఈ స్థితి కనిపిస్తుంది.

Employee employee = session.load(Employee.class, 1);
//after loading the object's state is Persisted

session.remove(employee);
//after deletion, the state of the object is Removed

session.save(employee);
//and now Persisted again

session.close();
//and now the Detached state