CodeGym /पाठ्यक्रम /SQL & Hibernate /@कई लोगों के लिए एक

@कई लोगों के लिए एक

SQL & Hibernate
स्तर 13 , सबक 2
उपलब्ध

टेबल-लेवल रिलेशनशिप

आइए हमारी दो तालिकाओं को फिर से देखें:

पहचान नाम पेशा वेतन आयु शामिल होने की तारीख
1 इवानोव इवान प्रोग्रामर 100000 25 2012-06-30
2 पेट्रोव पेट्र प्रोग्रामर 80000 23 2013-08-12
3 इवानोव सर्गेई टेस्टर 40000 तीस 2014-01-01
4 राबिनोविच मोइशा निदेशक 200000 35 2015-05-12
5 किरिंको अनास्तासिया कार्यालय प्रबंधक 40000 25 2015-10-10
6 वास्का बिल्ली 1000 3 2018-11-11

कर्मचारी तालिका:

इस तालिका में निम्नलिखित स्तंभ हैं:

  • आईडी आईएनटी
  • वचरर नाम
  • व्यवसाय वरचा
  • वेतन आई.टी
  • आयु आई.टी
  • join_date DATE

और इस प्रकार कार्य तालिका , जिसमें कर्मचारियों के लिए कार्य शामिल हैं, ऐसा दिखता है:

पहचान कर्मचारी_आईडी नाम अंतिम तारीख
1 1 दृश्यपटल पर एक बग ठीक करें 2022-06-01
2 2 बैकएंड पर एक बग ठीक करें 2022-06-15
3 5 कॉफी खरीदें 2022-07-01
4 5 कॉफी खरीदें 2022-08-01
5 5 कॉफी खरीदें 2022-09-01
6 (व्यर्थ) कार्यालय की सफाई करें (व्यर्थ)
7 4 जीवन का आनंद लें (व्यर्थ)
8 6 जीवन का आनंद लें (व्यर्थ)

इस तालिका में केवल 4 स्तंभ हैं:

  • आईडी कार्य की अद्वितीय संख्या है (और तालिका में पंक्तियाँ)।
  • कर्मचारी_आईडी - कर्मचारी तालिका से कर्मचारी की आईडी जिसे कार्य सौंपा गया है।
  • नाम - कार्य का नाम और विवरण।
  • समय सीमा - वह समय जिसके द्वारा कार्य पूरा किया जाना चाहिए।

कर्मचारी तालिका में एक एकल प्रविष्टि को कार्य तालिका में कई पंक्तियों द्वारा संदर्भित किया जा सकता है। इस तरह के टेबल-लेवल रिलेशनशिप को वन-टू -मैनी कहा जाता है।

जावा वर्ग स्तर से संबंध

और हमारी कक्षाएं, कर्मचारी वर्ग :

@Entity
@Table(name="user")
class Employee {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String name;

   @Column(name="occupation")
   public String occupation;

   @Column(name="salary")
   public Integer salary;

   @Column(name="join_date")
   public Date join;
}

और कर्मचारी कार्य वर्ग अपने मूल रूप में:

@Entity
@Table(name="task")
class EmployeeTask {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String description;

   @Column(name="employee_id")
   public Integer employeeId;

   @Column(name="deadline")
   public Date deadline;
}

@OneToMany एनोटेशन

हम Entity Classes के बीच Communication को एक अलग तरीके से व्यवस्थित कर सकते हैं।

@ElementCollection एनोटेशन याद रखें जिसका उपयोग हम पैरेंट क्लास में चाइल्ड ऑब्जेक्ट्स का संग्रह बनाने के लिए करते हैं? @OneToMany एनोटेशन के साथ भी कुछ ऐसा ही किया जा सकता है । सिर्फ इस बार कर्मचारी वर्ग में होगा बदलाव :

@Entity
@Table(name="user")
class Employee {
   @Column(name="id")
   public Integer id;

   @OneToMany(cascade = CascadeType.ALL)
   @JoinColumn(name = "employee_id")
   private Set<EmployeeTask> tasks = new HashSet<EmployeeTask>();
}

@OneToMany एनोटेशन का उपयोग करते हुए , हमने संकेत दिया कि objectकर्मचारीकई कर्मचारी टास्क ऑब्जेक्ट्स स्टोर कर सकते हैं । इसके अलावा, @JoinColumn एनोटेशन का उपयोग करते हुए , हमने संकेत दिया कि कार्य तालिका के किस कॉलम में ऑब्जेक्ट आईडी संग्रहीत हैकर्मचारी.

हालाँकि, कर्मचारी कार्य वर्ग में आमतौर पर एक फ़ील्ड नहीं होता है जो कर्मचारी_आईडी कॉलम को संदर्भित करता है। उदाहरण:

@Entity
@Table(name="task")
class EmployeeTask {
   @Column(name="id")
   public Integer id;

   @Column(name="name")
   public String description;

   @Column(name="deadline")
   public Date deadline;
}

कर्मचारी_आईडी फ़ील्ड को सेवा क्षेत्र माना जाता है और इसका मान हाइबरनेट द्वारा नियंत्रित किया जाता है।

उदाहरणों का अनुरोध करें

अगर आप किसी वर्कर को कोई टास्क ऐड करना चाहते हैं तो आपको इस तरह का कोड लिखना होगा:

EmployeeTask task1 = new EmployeeTask();
task1.description = "Do Something Important";
session.persist(task1);

EmployeeTask task2 = new EmployeeTask();
task2.description = "Nothing to do";
session.persist(task2);
session.flush();

Employee director = session.find(Employee.class, 4);
director.tasks.add(task1);
director.tasks.add(task2);

session.update(director);
session.flush();

सबसे पहले, हम दो EmployeeTask ऑब्जेक्ट बनाते हैं , उन्हें डेटाबेस में सेव करते हैं, और फ्लश () मेथड को कॉल करते हैं ताकि INSERT ऑपरेशन हो सके और ऑब्जेक्ट में ID हो।

फिर हम डेटाबेस में निदेशक को ढूंढते हैं, उससे कार्य क्षेत्र लेते हैं और उसमें दो कार्य जोड़ते हैं। फिर हम निदेशक को डेटाबेस में सहेजते हैं। उसके बाद, कर्मचारी_आईडी कॉलम में नए कार्यों के लिए डेटाबेस में मान 4 दिखाई देगा - कर्मचारी तालिका में निदेशक की आईडी।

महत्वपूर्ण! डेटाबेस में टेबल @ManyToOne और @OneToMany एनोटेशन के लिए समान हैं । लेकिन इन तालिकाओं के लिए जावा वर्ग अलग हैं।

टिप्पणियां
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION