Hibernate-də varlıqların vəziyyətləri nədir?
sobes.tech Süni İntellekt
AI-dan cavab
Hibernate-də, varlıq aşağıdakı vəziyyətlərdən birində ola bilər:
-
Keçici (Transient): Obyekt yaradılıb, lakin Hibernate sessiyası ilə əlaqələndirilməyib. Verilənlər bazasında təmsilatı yoxdur. Üzərində əməliyyatlar yaddaşda həyata keçirilir, lakin verilənlər bazasına təsir etmir.
// Student varlığı yaradılıb, lakin sessiyaya bağlı deyil Student student = new Student("Ivan", "Ivanov"); -
Daimi (Persistent): Obyekt mövcud Hibernate sessiyası ilə əlaqəlidir və onun tərəfindən idarə olunur. Obyektdəki hər hansı dəyişiklik, əməliyyatın təsdiqlənməsi və ya sessiyanın flush edilməsi zamanı verilənlər bazası ilə sinxronlaşdırılır. Sessiya vasitəsilə verilənlər bazasından oxunan obyekt bu vəziyyətdədir.
// Student varlığı verilənlər bazasından alınmış və ya orada saxlanılmışdır Session session = sessionFactory.openSession(); session.beginTransaction(); Student student = new Student("Petr", "Petrov"); session.save(student); // student indi Daimi vəziyyətdədir // və ya // Student student = session.get(Student.class, 1L); // student Daimi vəziyyətdə session.getTransaction().commit(); session.close(); -
Ayırılmış (Detached): Obyekt əvvəlki sessiya ilə əlaqəli olub, lakin sessiya bağlanıb və ya obyekt açıq şəkildə ayırılıb (məsələn,
session.evict(object)istifadə edilərək). Obyekt hələ də verilənlər bazası məlumatlarını ehtiva edir, lakin üzərində edilən dəyişikliklər avtomatik olaraq verilənlər bazasına sinxronlaşdırılmayacaq. Dəyişiklikləri saxlamaq üçün obyekt yenidən başqa sessiyaya qoşulmalıdır.Session session1 = sessionFactory.openSession(); session1.beginTransaction(); Student student = session1.get(Student.class, 1L); // Daimi session1.getTransaction().commit(); session1.close(); // student indi Ayırılmış vəziyyətdədir // Ayırılmış vəziyyətdə olan obyekt üzərində edilən dəyişikliklər verilənlər bazasını təsir etmir student.setName("New Name"); // Dəyişiklikləri saxlamaq üçün onu yeni sessiyaya yenidən qoşmaq lazımdır Session session2 = sessionFactory.openSession(); session2.beginTransaction(); session2.update(student); // student yenidən Daimi olur session2.getTransaction().commit(); session2.close();
Vəziyyətlər arasındakı keçidlər:
| Vəziyyətdən\Vəziyyətə | Transient | Persistent | Detached |
|---|---|---|---|
| Transient | (qalır) | save(), persist(), saveOrUpdate() |
(birbaşa mümkün deyil) |
| Persistent | (mümkün deyil) | (qalır) | close(), evict(), clear() |
| Detached | (mümkün deyil) | update(), merge(), saveOrUpdate() |
(qalır) |