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
}

ప్రధాన వ్యత్యాసం ఏమిటంటే, అన్ని పట్టికలకు పాస్-త్రూ id (PRIMARY KEY) ఉపయోగించబడుతుంది. మీరు ఒకే పట్టికలో మాత్రమే కాకుండా, ఈ పట్టికల సమూహంలో కూడా ఒకే idతో విభిన్న వరుసలను కలిగి ఉండకూడదు. హైబర్నేట్ దీన్ని చూసుకుంటుంది.

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, ఆపై మాత్రమే ఫిల్టర్ చేయాలి.