टेबल-स्तरीय संबंध

चला आमच्या दोन टेबल्स पुन्हा पाहू:

आयडी नाव व्यवसाय पगार वय रुजू दिनांक
इव्हानोव्ह इव्हान प्रोग्रामर 100000 २५ 2012-06-30
2 पेट्रोव्ह पेत्र प्रोग्रामर 80000 23 2013-08-12
3 इव्हानोव्ह सेर्गे परीक्षक 40000 तीस 2014-01-01
4 राबिनोविच मोइशा दिग्दर्शक 200000 35 2015-05-12
किरिएन्को अनास्तासिया कार्यालय व्यवस्थापक 40000 २५ 2015-10-10
6 वास्का मांजर 1000 3 2018-11-11

कर्मचारी टेबल:

या सारणीमध्ये खालील स्तंभ आहेत:

  • आयडी INT
  • VARCHAR नाव
  • व्यवसाय वरचा
  • पगार INT
  • वय INT
  • join_date DATE

आणि अशा प्रकारे कार्य सारणी , ज्यामध्ये कर्मचार्‍यांसाठी कार्ये आहेत, असे दिसते:

आयडी कर्मचारी_आयडी नाव अंतिम मुदत
फ्रंटएंडवरील बगचे निराकरण करा 2022-06-01
2 2 बॅकएंडवरील बगचे निराकरण करा 2022-06-15
3 कॉफी विकत घ्या 2022-07-01
4 कॉफी विकत घ्या 2022-08-01
कॉफी विकत घ्या 2022-09-01
6 (निरर्थक) ऑफिसची साफसफाई करा (निरर्थक)
4 जीवनाचा आनंद घे (निरर्थक)
8 6 जीवनाचा आनंद घे (निरर्थक)

या सारणीमध्ये फक्त 4 स्तंभ आहेत:

  • id ही कार्याची अद्वितीय संख्या आहे (आणि सारणीतील पंक्ती).
  • कर्मचारी_आयडी - कर्मचाऱ्याच्या टेबलमधील कर्मचाऱ्याचा आयडी ज्याला कार्य नियुक्त केले आहे.
  • नाव - कार्याचे नाव आणि वर्णन.
  • अंतिम मुदत - ज्या वेळेत कार्य पूर्ण करणे आवश्यक आहे.

कर्मचार्‍यांच्या टेबलमधील एकल एंट्री टास्क टेबलमधील अनेक पंक्तींद्वारे संदर्भित केली जाऊ शकते. अशा सारणी-स्तरीय संबंधांना एक ते अनेक म्हणतात .

जावा वर्ग पातळीशी संबंध

आणि आमचे वर्ग, कर्मचारी वर्ग :

@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;
}

आणि EmployeeTask वर्ग त्याच्या मूळ स्वरूपात:

@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 भाष्य

आम्ही संस्था वर्गांमधील संवाद वेगळ्या पद्धतीने मांडू शकतो.

@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 भाष्य वापरून , आम्ही सूचित केले की ऑब्जेक्टकर्मचारीअनेक EmployeeTask वस्तू संग्रहित करू शकतात . तसेच, @JoinColumn भाष्य वापरून , आम्ही टास्क टेबलच्या कोणत्या कॉलममध्ये ऑब्जेक्ट आयडी संग्रहित केला आहे हे सूचित केले.कर्मचारी.

तथापि, EmployeeTask वर्गात सहसा कर्मचारी_आयडी स्तंभाचा संदर्भ देणारे फील्ड नसते. उदाहरण:

@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 भाष्यांसाठी समान आहेत . पण या टेबल्सचे Java वर्ग वेगळे आहेत.