பாதுகாப்பு பிரச்சினைகள்

இன்று நாம் ஒரு புதிய மற்றும் சூப்பர் சுவாரஸ்யமான திட்டத்தைப் பெறுவோம் - தரவுத்தளத்தில் வகுப்பு படிநிலையைச் சேமிக்க ஹைபர்னேட் அம்சங்களைப் பயன்படுத்துகிறோம்.

ஒரு வர்க்க வரிசைமுறை என்பது பரம்பரை உறவின் மூலம் ஒன்றோடொன்று தொடர்புடைய வகுப்புகளின் தொகுப்பாகும்.

நீங்கள் தரவுத்தளத்தில் சேமிக்க விரும்பும் மூன்று வகுப்புகள் உள்ளன என்று கற்பனை செய்து பாருங்கள்:

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 சாத்தியமான வழிகளை ஹைபர்னேட் கொண்டுள்ளது:

  • MappedSuperclass
  • ஒற்றை அட்டவணை
  • இணைந்த அட்டவணை
  • ஒரு வகுப்பிற்கு அட்டவணை

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

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

அவை ஒவ்வொன்றும் எதைக் குறிக்கின்றன என்பதை கீழே பகுப்பாய்வு செய்வோம்.

@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 இல் தரவுத்தள வினவலை எழுத முடியாது மற்றும் அனைத்து பயனர்களின் பட்டியலையும் பெற முடியாது: பயனர், பணியாளர், வாடிக்கையாளர்.