Ҳолатҳои мавҷудот дар Hibernate чӣ гунаанд?
sobes.tech AI
Ҷавоб аз AI
Дар Hibernate, мақсадноки мақом метавонад дар яке аз ҳолатҳои зерин қарор гирад:
-
Transient (Ӯзгори): Объект сохта шудааст, аммо бо сессияи Hibernate пайваст нашудааст. Дар базаи додаҳо намоиш надорад. Ҳар гуна амалиётҳо бо он дар хотира иҷро мешаванд, аммо ба база таъсир намерасонанд.
// Мақоми Student сохта шудааст, аммо бо сессия пайваст нашудааст Student student = new Student("Ivan", "Ivanov"); -
Persistent (Мустаҳкам): Объект бо сессияи ҳозираи Hibernate пайваст аст ва онро идора мекунад. Ҳар гуна тағирот дар объект ҳангоми тасдиқи транзаксия ё фурӯши (flush) сессия ба база ҳамоҳанг карда мешавад. Объекти, ки аз база бо ёрии сессия гирифта шудааст, дар ин ҳолат қарор дорад.
// Мақоми Student аз база гирифта ё дар он нигоҳ дошта шудааст Session session = sessionFactory.openSession(); session.beginTransaction(); Student student = new Student("Petr", "Petrov"); session.save(student); // student ҳоло дар ҳолати Persistent // Ё // Student student = session.get(Student.class, 1L); // student дар ҳолати Persistent session.getTransaction().commit(); session.close(); -
Detached (Азхудшуда): Объект қаблан бо сессия пайваст буд, аммо сессия баста ё объект ба таври равшан аз сессия хориҷ карда шуд (масалан, бо ёрии
session.evict(object)). Объект ҳоло маълумотҳоро аз база дорад, аммо тағирот дар он ба таври худкор ба база ҳамоҳанг намешавад. Барои нигоҳ доштани тағирот, бояд объектро дубора ба сессияи дигар пайваст кард.Session session1 = sessionFactory.openSession(); session1.beginTransaction(); Student student = session1.get(Student.class, 1L); // Persistent session1.getTransaction().commit(); session1.close(); // student ҳоло дар ҳолати Detached // Тағйирот дар объект дар Detached ҳолат ба база таъсир намерасонад student.setName("Номи нав"); // Барои нигоҳ доштани тағирот бояд онро ба сессияи нав пайваст кард Session session2 = sessionFactory.openSession(); session2.beginTransaction(); session2.update(student); // student дубора дар ҳолати Persistent session2.getTransaction().commit(); session2.close();
Пешрафтҳо байни ҳолатҳо:
| Аз ҳолат\Ба ҳолат | Transient | Persistent | Detached |
|---|---|---|---|
| Transient | (мемонад) | save(), persist(), saveOrUpdate() |
(ба таври мустақим имконнопазир) |
| Persistent | (имконнопазир) | (мемонад) | close(), evict(), clear() |
| Detached | (имконнопазир) | update(), merge(), saveOrUpdate() |
(мемонад) |