పట్టిక-స్థాయి సంబంధం
మన రెండు పట్టికలను మళ్ళీ చూద్దాం:
id | పేరు | వృత్తి | జీతం | వయస్సు | చేరుతున్న తేదీ |
---|---|---|---|---|---|
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 |
ఉద్యోగుల పట్టిక:
ఈ పట్టిక కింది నిలువు వరుసలను కలిగి ఉంది:
- id INT
- పేరు VARCHAR
- వృత్తి VARCHA
- జీతం INT
- వయస్సు INT
- చేరిన_తేదీ DATE
మరియు ఉద్యోగుల కోసం టాస్క్లను కలిగి ఉన్న టాస్క్ టేబుల్ ఇలా కనిపిస్తుంది:
id | ఉద్యోగి_ఐడి | పేరు | గడువు |
---|---|---|---|
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 నిలువు వరుసలు మాత్రమే ఉన్నాయి:
- id అనేది టాస్క్ యొక్క ప్రత్యేక సంఖ్య (మరియు పట్టికలోని అడ్డు వరుసలు).
- Employee_id - టాస్క్ కేటాయించిన ఉద్యోగి టేబుల్ నుండి ఉద్యోగి యొక్క 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 క్లాస్ సాధారణంగా ఉద్యోగి_id కాలమ్ని సూచించే ఫీల్డ్ని కలిగి ఉండదు. ఉదాహరణ:
@Entity
@Table(name="task")
class EmployeeTask {
@Column(name="id")
public Integer id;
@Column(name="name")
public String description;
@Column(name="deadline")
public Date deadline;
}
Employee_id ఫీల్డ్ సేవా క్షేత్రంగా పరిగణించబడుతుంది మరియు దాని విలువ హైబర్నేట్ ద్వారా నియంత్రించబడుతుంది.
అభ్యర్థన ఉదాహరణలు
మీరు కొంతమంది వర్కర్కి కొంత పనిని జోడించాలనుకుంటే, మీరు ఇలా కోడ్ని వ్రాయాలి:
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 ఉల్లేఖనాల కోసం ఒకే విధంగా ఉంటాయి . కానీ ఈ పట్టికల కోసం జావా తరగతులు భిన్నంగా ఉంటాయి.