Ποια είναι τα καταστάσεις των οντοτήτων στο Hibernate;
sobes.tech AI
Απάντηση από AI
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 bazaya 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. Ob'ekt üzərində hər hansı dəyişiklik, əməliyyatın təsdiqlənməsi və ya sessiyanın flush edilməsi zamanı bazaya sinxronlaşdırılır. Sessiya vasitəsilə bazadan oxunan obyekt bu vəziyyətdədir.
// Student varlığı bazadan 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 Dəqiq vəziyyətdədir // və ya // Student student = session.get(Student.class, 1L); // student Dəqiq vəziyyətdədir session.getTransaction().commit(); session.close(); -
Ayrılmış (Detached): Ob'ekt əvvəlki sessiya ilə əlaqəli olub, lakin sessiya bağlanıb və ya obyekt açıq şəkildə ayrılıb (məsələn,
session.evict(object)istifadə edilərək). Obyekt hələ də bazadan məlumatları ehtiva edir, lakin üzərində edilən dəyişikliklər avtomatik olaraq bazaya 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); // Dəqiq session1.getTransaction().commit(); session1.close(); // student indi Ayrılmış vəziyyətdədir // Ayrılmış vəziyyətdə olan obyekt üzərində edilən dəyişikliklər bazanı 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 Dəqiq 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) |