5.1 விளக்கம்

இறுதியாக, கடைசி உத்தி ஒரு வகுப்பிற்கு அட்டவணை. அதாவது ஒவ்வொரு வகுப்பிற்கும் தனித்தனி அட்டவணை பயன்படுத்தப்படும். ஒரு வகையில், இது அதே MappedSuperClass ஆகும், புதுப்பிக்கப்பட்ட வடிவத்தில் மட்டுமே.

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

@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)

இந்த சிறுகுறிப்பு கொண்ட வகுப்புகள் இப்படி இருக்கும்:


@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Entity
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;
}

மேலும் ஒவ்வொரு வகுப்பிற்கும் தனித்தனி அட்டவணைகள். உதாரணமாக, இவை:


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
}

முக்கிய வேறுபாடு என்னவென்றால், அனைத்து அட்டவணைகளுக்கும் பாஸ்-த்ரூ ஐடி (PRIMARY KEY) பயன்படுத்தப்படுகிறது. ஒரே அட்டவணையில் மட்டுமல்ல, இந்த அட்டவணைக் குழுவிலும் ஒரே ஐடியுடன் வெவ்வேறு வரிசைகளை நீங்கள் கொண்டிருக்க முடியாது. இதை Hibernate கவனித்துக் கொள்ளும்.

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

இவை அனைத்தும் எவ்வாறு செயல்படுகின்றன என்பதைப் பார்ப்பது மிகவும் சுவாரஸ்யமானது.

அனைத்து பயனர்களையும் பெற எளிய HQL வினவலை எழுதலாம்: பயனர், பணியாளர், வாடிக்கையாளர் :

List<User> accounts = session.createQuery("from User").list();

ஆனால் ஹைபர்னேட், மிகவும் சுவாரஸ்யமான வினவலை உருவாக்கும். இது எல்லா அட்டவணைகளிலிருந்தும் ஒரு தேர்வை உருவாக்கும், பின்னர் அதை UNION ALL மூலம் ஒரு வகையான மெய்நிகர் அட்டவணையில் இணைக்கும், பின்னர் மட்டுமே அது தேடும் மற்றும் / அல்லது தேர்ந்தெடுக்கும்

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

  • occupation VARCHAR
  • salary INT
  • join DATE
  • address VARCHAR

செயல்படுத்தும் முன் பயனர் அட்டவணையில் SQL வினவலின் எடுத்துக்காட்டு UNION ALL:


SELECT   id,
         name,
         birthday,
         CAST(NULL AS VARCHAR) AS occupation,
         CAST(NULL AS INT) AS salary,
         CAST(NULL AS DATE) AS join,
         CAST(NULL AS VARCHAR) AS address,
         0 AS clazz
FROM  user

செயல்படுத்துவதற்கு முன் பணியாளர் அட்டவணையில் SQL வினவல் ஒரு எடுத்துக்காட்டு UNION ALL:


SELECT   id,
         name,
         birthday,
         occupation,
         salary,
         join,
         CAST(NULL AS VARCHAR) AS address,
         1 AS clazz
FROM  employee

செயல்படுத்துவதற்கு முன் கிளையன்ட் அட்டவணையில் SQL வினவலின் எடுத்துக்காட்டு UNION ALL:


SELECT  id,
        name,
        birthday,
        CAST(NULL AS VARCHAR) AS occupation,
        CAST(NULL AS INT) AS salary,
        CAST(NULL AS DATE) AS join,
        address,
        2 AS clazz
FROM client

நல்ல செய்தி என்னவென்றால், HQL வினவல்கள் நீங்கள் விரும்பும் வழியில் செயல்படும்.

மோசமான செய்தி என்னவென்றால், அட்டவணையில் நிறைய தரவு இருந்தால் அவை மெதுவாக இருக்கும். ஏனெனில் முதலில் நீங்கள் எல்லா அட்டவணைகளிலிருந்தும் தரவைத் தேர்ந்தெடுக்க வேண்டும், பின்னர் அவற்றின் வரிசைகளை உடன் இணைக்க வேண்டும் UNION ALL, பின்னர் மட்டுமே வடிகட்ட வேண்டும்.