மாநிலங்களின் பட்டியல்

இப்போது வேடிக்கை தொடங்குகிறது. நிறுவனப் பொருள்களின் நிலைகளைப் படிப்போம். எல்லாவற்றிற்கும் நீங்கள் பணம் செலுத்த வேண்டும், மேலும் ஹைபர்னேட்டைப் பயன்படுத்தவும். HQL கற்றுக்கொள்வது இவ்வளவு விலை என்று நீங்கள் நினைக்கவில்லையா? இல்லை, வாழ்க்கை இன்னும் கொஞ்சம் சிக்கலானது.

நீங்கள் Hibernate ஐப் பயன்படுத்தி தரவுத்தளத்தில் சேமிக்கக்கூடிய சில வகையான Entity பொருள் இருந்தால், Hibernate இன் பார்வையில், இந்த பொருள் நான்கு நிலைகளைக் கொண்டிருக்கலாம்:

  • நிலையற்றது
  • நிலையான (அல்லது நிர்வகிக்கப்பட்ட)
  • பிரிக்கப்பட்டது
  • அகற்றப்பட்டது

உங்களுக்கு ஆர்வமாக, இந்த விரிவுரையில் இந்த படத்தைச் சேர்க்கிறேன்:

நிலையற்றது

உண்மையில், நுணுக்கங்கள் இல்லாமல் இல்லாவிட்டாலும், எல்லாம் தோன்றுவதை விட மிகவும் எளிமையானது. எடுத்துக்காட்டாக, Java குறியீட்டைப் பயன்படுத்தி நீங்கள் வெளிப்படையாக உருவாக்கிய, மற்றும் Hibernate ஐப் பயன்படுத்தி தரவுத்தளத்தில் இருந்து ஏற்றாத ஒவ்வொரு நிறுவனப் பொருளும் ஒரு நிலையற்ற (வெளிப்படையான) நிலையைக் கொண்டுள்ளது.

EmployeeEntity employee = new EmployeeEntity();

நிலையற்ற நிலை என்பது ஹைபர்னேட்டுக்கு இந்தப் பொருளைப் பற்றி எதுவும் தெரியாது, மேலும் பொருளின் மீதான எந்தச் செயலும் ஹைபர்னேட்டைப் பாதிக்காது, இந்த பொருளின் மீது ஹைபர்னேட்டின் வேலையும் இல்லை.

இத்தகைய பொருள்கள் POJO - ப்ளைன் பழைய ஜாவா பொருள் என்றும் அழைக்கப்படுகின்றன . இந்த வார்த்தை பெரும்பாலும் தந்திரமான நடத்தை கொண்ட பல்வேறு பொருள்களுக்கு எதிரானதாக பயன்படுத்தப்படுகிறது. மொக்கிடோ உருவாக்கிய மோக் பொருள்கள் நினைவிருக்கிறதா? இங்கே அவர்கள் POJO அல்ல.

சில கிளையன்ட் குறியீடு நிலையற்ற நிலை கொண்ட ஒரு பொருளுடன் வேலை செய்தால், அவற்றின் தொடர்புகளை மிக எளிய திட்டத்தால் விவரிக்கலாம்:

தொடர்ந்து அல்லது நிர்வகிக்கப்படுகிறது

அடுத்த பொதுவான வழக்கு ஹைபர்னேட் இயந்திரத்துடன் தொடர்புடைய பொருள்கள். அவர்களின் நிலை நிலையானது (அல்லது நிர்வகிக்கப்பட்டது) என்று அழைக்கப்படுகிறது. இந்த நிலையில் ஒரு பொருளைப் பெற இரண்டு வழிகள் உள்ளன:

  • ஹைபர்னேட்டிலிருந்து பொருளை ஏற்றவும்.
  • பொருளை ஹைபர்னேட்டில் சேமிக்கவும்.

எடுத்துக்காட்டுகள்:

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

அத்தகைய பொருள் பொதுவாக தரவுத்தளத்தில் ஒருவித பதிவுக்கு ஒத்திருக்கிறது, அது ஒரு ஐடி மற்றும் போன்றது. இந்த ஆப்ஜெக்ட் ஹைபர்னேட் அமர்வுடன் இணைக்கப்பட்டுள்ளது, பொதுவாக இது உண்மையான பொருளால் அல்ல, மாறாக சில வகையான ப்ராக்ஸியால் குறிப்பிடப்படுகிறது.

செஷன்.லோட்() முறையை அழைத்த பிறகு , நீங்கள் சில ஸ்டப் பொருளை (ப்ராக்ஸி) திரும்பப் பெறுவீர்கள், மேலும் தரவுத்தளத்திற்கான அனைத்து அழைப்புகளும் இந்த பொருளின் முறைகளை அழைத்த பின்னரே செய்யப்படும். ஆனால் அத்தகைய விவரங்களைப் பற்றி சிறிது நேரம் கழித்து பேசுவோம்.

கிளையன்ட் குறியீடு மற்றும் நிர்வகிக்கப்பட்ட நிலையில் உள்ள பொருளின் தொடர்பு பின்வரும் படத்துடன் விவரிக்கப்படலாம்:

பிரிக்கப்பட்டது

அமர்விலிருந்து பொருள் பிரிக்கப்பட்டால் அடுத்த நிலை. அதாவது, ஹைபர்னேட் அமர்வில் ஆப்ஜெக்ட் இணைக்கப்பட்டவுடன், அமர்வு மூடப்பட்டது அல்லது பரிவர்த்தனை முடிந்தது, மேலும் ஹைபர்னேட் இந்த பொருளை இனி கண்காணிக்காது.

உதாரணமாக:

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

முதல் எடுத்துக்காட்டில், அமர்வு மூடப்பட்டது. இரண்டாவது வழக்கில், evict() முறையைப் பயன்படுத்தி அமர்விலிருந்து பொருளைப் பிரிக்க விரும்புகிறோம் என்பதை வெளிப்படையாகக் குறிப்பிட்டுள்ளோம் .

புதிய குறியீடு-பொருள் தொடர்புத் திட்டம் இப்படி இருக்கும்:

இங்கே அது சுவாரஸ்யமானது. உங்கள் பொருள் ஹைபர்னேட்டிலிருந்து பெறப்பட்டிருந்தால், உண்மையான பொருளுக்குப் பதிலாக உங்களுக்கு ப்ராக்ஸி வழங்கப்பட்டிருக்கலாம். இந்த ப்ராக்ஸி பொருள், அமர்விலிருந்து துண்டிக்கப்பட்ட பிறகு, அதன் முறைகள் அழைக்கப்படும் போது விதிவிலக்குகளை வீசும்.

Hibernate உடன் பணிபுரியும் போது அனைத்து தொடக்கநிலையாளர்களுக்கும் இது மிகவும் பொதுவான பிரச்சனையாகும். நீங்கள் ஒரு நிறுவனப் பொருளுடன் பணிபுரியும் போது இது போன்ற கேள்விகளுக்கான பதிலை எந்த நேரத்திலும் நீங்கள் சரியாகத் தெரிந்து கொள்ள வேண்டும் :

  • உங்களிடம் உண்மையான பொருள் உள்ளதா அல்லது உண்மையான பொருளின் ப்ராக்ஸி மட்டும் உள்ளதா?
  • நீங்கள் தற்போது பரிவர்த்தனையில் இருக்கிறீர்களா இல்லையா?
  • இது படிக்க-எழுத்து பரிவர்த்தனையா அல்லது படிக்க மட்டுமேயான பரிவர்த்தனையா?
  • 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