Hubungan Tabel-Tingkat
Ayo ndeleng loro tabel maneh:
id | jeneng | pendhudhukan | gaji | umur | join_date |
---|---|---|---|---|---|
1 | Iwan Iwan | Programmer | 100000 | 25 | 30-06-2012 |
2 | Petrov Petruk | Programmer | 80000 | 23 | 2013-08-12 |
3 | Ivanov Sergey | Tester | 40000 | telung puluh | 2014-01-01 |
4 | Rabinovich Moisha | direktur | 200000 | 35 | 2015-05-12 |
5 | Kirienko Anastasia | Kantor manager | 40000 | 25 | 10-10-2015 |
6 | Vaska | Cat | 1000 | 3 | 2018-11-11 |
Tabel karyawan:
Tabel iki nduweni kolom ing ngisor iki:
- id INT
- jeneng VARCHAR
- pendhudhuk VARCHA
- gaji INT
- umur INT
- join_date DATE
Lan iki carane tabel tugas , sing ngemot tugas kanggo karyawan, katon kaya:
id | id_karyawan | jeneng | deadline |
---|---|---|---|
1 | 1 | Ndandani bug ing frontend | 2022-06-01 |
2 | 2 | Ndandani bug ing backend | 2022-06-15 |
3 | 5 | Tuku kopi | 2022-07-01 |
4 | 5 | Tuku kopi | 2022-08-01 |
5 | 5 | Tuku kopi | 2022-09-01 |
6 | (NULL) | Ngresiki kantor | (NULL) |
7 | 4 | Seneng urip | (NULL) |
8 | 6 | Seneng urip | (NULL) |
Tabel iki mung nduweni 4 kolom:
- id minangka nomer unik saka tugas (lan baris ing tabel).
- employee_id - ID karyawan saka meja pegawe sing tugas diutus kanggo.
- jeneng - jeneng lan gambaran saka tugas.
- deadline - wektu kang tugas kudu rampung.
Entri siji ing tabel karyawan bisa dirujuk dening akeh larik ing tabel tugas. Hubungan tingkat meja kasebut diarani siji-kanggo - akeh.
Sesambungan karo tataran kelas Jawa
Lan kelas kita, kelas Karyawan :
@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;
}
Lan kelas EmployeeTask ing wangun asli:
@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 anotasi
Kita bisa ngatur komunikasi antarane kelas Entitas kanthi cara sing beda.
Elinga anotasi @ElementCollection sing digunakake kanggo nggawe koleksi obyek anak ing kelas induk? Ana sing padha bisa ditindakake kanthi anotasi @OneToMany . Mung wektu iki, kelas Karyawan bakal diganti :
@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>();
}
Nggunakake anotasi @OneToMany , kita nuduhake yen obyek kasebutpegawebisa nyimpen akeh obyek EmployeeTask . Uga, nggunakake anotasi @JoinColumn , kita nuduhake ing kolom ing tabel tugas id obyek disimpenpegawe.
Nanging, kelas EmployeeTask biasane ora ngemot kolom sing nuduhake kolom employee_id. Tuladha:
@Entity
@Table(name="task")
class EmployeeTask {
@Column(name="id")
public Integer id;
@Column(name="name")
public String description;
@Column(name="deadline")
public Date deadline;
}
Kolom employee_id dianggep minangka kolom layanan lan nilai kasebut dikontrol dening Hibernate.
Nyuwun conto
Yen sampeyan pengin nambah sawetara tugas kanggo sawetara buruh, sampeyan kudu nulis kode kaya iki:
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();
Kaping pisanan, kita nggawe rong obyek EmployeeTask , simpen ing database, lan nelpon metode flush () supaya operasi INSERT ditindakake lan obyek kasebut duwe ID.
Banjur kita nemokake direktur ing database, njupuk lapangan tugas saka dheweke lan nambah rong tugas kanggo dheweke. Banjur kita nyimpen direktur menyang database. Sawise iku, nilai 4 bakal katon ing database kanggo tugas anyar ing kolom employee_id - id direktur ing tabel karyawan.
Penting! Tabel ing database padha kanggo @ManyToOne lan @OneToMany anotasi . Nanging kelas Jawa kanggo tabel iki beda.
GO TO FULL VERSION