Hibernate-деги объекттердин абалы кандай?
AIден жооп
sobes.tech 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() |
(калат) |