Millised on entiteetide seisundid Hibernate'is?
sobes.tech AI
Vastus AI-lt
Hibernate'is võib olek olla üks järgmistest:
-
Transient (Ülemineku): Objekt on loodud, kuid ei ole seotud Hibernate'i sessiooniga. Sellel ei ole andmebaasis esindatust. Tegevused sellel toimuvad mälus, kuid ei mõjuta andmebaasi.
// Student-objekt on loodud, kuid ei ole seotud sessiooniga Student student = new Student("Ivan", "Ivanov"); -
Persistent (Püsiv): Objekt on seotud praeguse Hibernate sessiooniga ja seda hallatakse. Igasugused muudatused objekti sees sünkroniseeritakse andmebaasiga, kui kinnitatakse transaktsioon või tühjendatakse (flush) sessioon. Objekt, mis on sessiooni kaudu andmebaasist loetud, on selles olekus.
// Student-objekt on saadud andmebaasist või salvestatud sinna Session session = sessionFactory.openSession(); session.beginTransaction(); Student student = new Student("Petr", "Petrov"); session.save(student); // student on nüüd püsivas olekus // Või // Student student = session.get(Student.class, 1L); // student on püsivas olekus session.getTransaction().commit(); session.close(); -
Detached (Eraldatud): Objekt oli varem seotud sessiooniga, kuid sessioon on suletud või objekt on selgelt eraldatud (näiteks
session.evict(object)abil). Objekti andmed sisaldavad endiselt andmebaasi andmeid, kuid tehtud muudatused ei ole automaatselt sünkroniseeritud. Muudatuste salvestamiseks tuleb objekt uuesti ühendada teise sessiooniga.Session session1 = sessionFactory.openSession(); session1.beginTransaction(); Student student = session1.get(Student.class, 1L); // Püsiv session1.getTransaction().commit(); session1.close(); // student on nüüd Detached // Muudatused Detached olekus ei mõjuta andmebaasi student.setName("Uus nimi"); // Muudatuste salvestamiseks tuleb see uuesti ühendada uue sessiooniga Session session2 = sessionFactory.openSession(); session2.beginTransaction(); session2.update(student); // student on taas Püsiv session2.getTransaction().commit(); session2.close();
Liikumine olekute vahel:
| Olekust\Olekusse | Transient | Persistent | Detached |
|---|---|---|---|
| Transient | (jääb) | save(), persist(), saveOrUpdate() |
(otseselt ei ole võimalik) |
| Persistent | (võimalik) | (jääb) | close(), evict(), clear() |
| Detached | (võimalik) | update(), merge(), saveOrUpdate() |
(jääb) |