Táblázat szintű kapcsolat
Nézzük még egyszer a két táblázatunkat:
id | név | Foglalkozása | fizetés | kor | csatlakozás dátuma |
---|---|---|---|---|---|
1 | Ivanov Iván | Programozó | 100 000 | 25 | 2012-06-30 |
2 | Petrov Petr | Programozó | 80000 | 23 | 2013-08-12 |
3 | Ivanov Szergej | Vizsgáló | 40000 | harminc | 2014-01-01 |
4 | Rabinovics Moisa | Rendező | 200 000 | 35 | 2015-05-12 |
5 | Kirienko Anasztázia | Irodavezető | 40000 | 25 | 2015-10-10 |
6 | Vaska | Macska | 1000 | 3 | 2018-11-11 |
alkalmazotti táblázat:
Ez a táblázat a következő oszlopokat tartalmazza:
- azonosító INT
- név VARCHAR
- foglalkozás VARCHA
- fizetés INT
- kor INT
- csatlakozási_dátum DATE
Így néz ki az alkalmazottak feladatait tartalmazó feladattábla :
id | employee_id | név | határidő |
---|---|---|---|
1 | 1 | Javítson ki egy hibát a kezelőfelületen | 2022-06-01 |
2 | 2 | Javítson ki egy hibát a háttérben | 2022-06-15 |
3 | 5 | Vegyél kávét | 2022-07-01 |
4 | 5 | Vegyél kávét | 2022-08-01 |
5 | 5 | Vegyél kávét | 2022-09-01 |
6 | (NULLA) | Takarítsd ki az irodát | (NULLA) |
7 | 4 | Élvezd az életet | (NULLA) |
8 | 6 | Élvezd az életet | (NULLA) |
Ez a táblázat csak 4 oszlopot tartalmaz:
- id a feladat egyedi száma (és a táblázat sorai).
- munkavállaló_azonosítója – annak az alkalmazottnak az azonosítója az alkalmazotti táblából, amelyhez a feladat hozzá van rendelve.
- név - a feladat neve és leírása.
- határidő - az az idő, ameddig a feladatot el kell végezni.
Az alkalmazotti tábla egyetlen bejegyzésére a feladattábla több sora hivatkozhat. Az ilyen táblaszintű kapcsolatot egy- a-többhöz nevezzük.
Kapcsolat a Java osztályszinttel
És az osztályaink, az alkalmazotti osztály :
@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;
}
És az EmployeeTask osztály eredeti formájában:
@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 kommentár
Az Entity osztályok közötti kommunikációt más módon is meg tudjuk szervezni.
Emlékszel az @ElementCollection annotációra , amellyel a szülőosztályban utód objektumok gyűjteményét hoztuk létre? Valami hasonlót lehet tenni a @OneToMany annotációval . Csak ezúttal az Alkalmazottak osztálya módosul :
@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>();
}
A @OneToMany megjegyzés használatával jeleztük, hogy az objektummunkavállalósok EmployeeTask objektumot tárolhat . Ezenkívül a @JoinColumn megjegyzés segítségével jeleztük, hogy a feladattábla melyik oszlopában van tárolva az objektumazonosítómunkavállaló.
Az EmployeeTask osztály azonban általában nem tartalmaz olyan mezőt, amely a munkavállalói_azonosító oszlopra hivatkozik. Példa:
@Entity
@Table(name="task")
class EmployeeTask {
@Column(name="id")
public Integer id;
@Column(name="name")
public String description;
@Column(name="deadline")
public Date deadline;
}
Az alkalmazott_azonosító mező szolgáltatási mezőnek minősül, és értékét a Hibernate szabályozza.
Kérjen példákat
Ha valamilyen feladatot szeretne hozzáadni néhány dolgozóhoz, akkor a következő kódot kell írnia:
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();
Először létrehozunk két EmployeeTask objektumot , elmentjük őket az adatbázisba, és meghívjuk a flush() metódust , hogy az INSERT művelet végrehajtásra kerüljön, és az objektumoknak azonosítójuk legyen.
Ezután megkeressük az adatbázisban a rendezőt, kivesszük tőle a feladatok mezőt és hozzáadunk két feladatot. Ezután elmentjük a rendezőt az adatbázisba. Ezt követően a 4-es érték jelenik meg az adatbázisban az új feladatoknál a munkavállalói_id oszlopban - az igazgató azonosítója az alkalmazotti táblában.
Fontos! Az adatbázisban lévő táblázatok megegyeznek a @ManyToOne és a @OneToMany megjegyzésekkel . De ezeknek a tábláknak a Java osztályai eltérőek.
GO TO FULL VERSION