Kādi ir entitāšu stāvokļi Hibernate?
sobes.tech AI
Atbilde no AI
Hibernate entitāte var atrasties vienā no šādām stāvokļiem:
-
Transient (Pagaidu): Objekts ir izveidots, bet nav saistīts ar Hibernate sesiju. Tam nav attēlojuma datu bāzē. Operācijas ar to tiek veiktas atmiņā, bet neietekmē datu bāzi.
// Student entītija ir izveidota, bet nav piesaistīta sesijai Student student = new Student("Ivan", "Ivanov"); -
Persistent (Pastāvīgs): Objekts ir saistīts ar pašreizējo Hibernate sesiju un to pārvalda. Jebkādas izmaiņas objektā tiks sinhronizētas ar datu bāzi, apstiprinot transakciju vai iztukšojot (flush) sesiju. Objekts, kas ielādēts no datu bāzes ar sesijas palīdzību, ir šajā stāvoklī.
// Student entītija ir iegūta no datu bāzes vai saglabāta tajā Session session = sessionFactory.openSession(); session.beginTransaction(); Student student = new Student("Petr", "Petrov"); session.save(student); // student tagad ir Pastāvīgs // Vai // Student student = session.get(Student.class, 1L); // student ir Pastāvīgs session.getTransaction().commit(); session.close(); -
Detached (Atvienots): Objekts agrāk bija saistīts ar sesiju, bet sesija tika aizvērta vai objekts tika skaidri atvienots (piemēram, ar
session.evict(object)). Objekts joprojām satur datus no datu bāzes, bet izmaiņas tajā netiks automātiski sinhronizētas ar datu bāzi. Lai saglabātu izmaiņas, objektu jāpievieno vēlreiz citai sesijai.Session session1 = sessionFactory.openSession(); session1.beginTransaction(); Student student = session1.get(Student.class, 1L); // Pastāvīgs session1.getTransaction().commit(); session1.close(); // student tagad ir Atvienots // Izmaiņas objektā Atvienotā stāvoklī neietekmēs datu bāzi student.setName("Jauns vārds"); // Lai saglabātu izmaiņas, to jāpievieno jaunai sesijai Session session2 = sessionFactory.openSession(); session2.beginTransaction(); session2.update(student); // student atkal kļūst par Pastāvīgu session2.getTransaction().commit(); session2.close();
Pārejas starp stāvokļiem:
| No stāvokļa\Uz stāvokli | Transient | Persistent | Detached |
|---|---|---|---|
| Transient | (paliek) | save(), persist(), saveOrUpdate() |
(tieši nav iespējams) |
| Persistent | (nav iespējams) | (paliek) | close(), evict(), clear() |
| Detached | (nav iespējams) | update(), merge(), saveOrUpdate() |
(paliek) |