Ինչ են Hibernate-ի մեջ առարկաների վիճակները։
sobes.tech AI
Պատասխան AI-ից
Hibernate-ում էություն կարող է գտնվել հետևյալ վիճակներից մեկում.
-
Transient (Տրանսիենտ): Օբյեկտը ստեղծված է, բայց չի կապված Hibernate սեսիայի հետ: Չունի տվյալների բազայում ներկայացում: Գործողությունները նրա հետ կատարվում են հիշողության մեջ, բայց չեն ազդում տվյալների բազայի վրա:
// Student էությունը ստեղծված է, բայց չի կապված սեսիայի հետ Student student = new Student("Ivan", "Ivanov"); -
Persistent (Հաստատուն): Օբյեկտը կապված է ընթացիկ Hibernate սեսիայի հետ և կառավարվում է նրա կողմից: Յուրաքանչյուր փոփոխություն, որը կատարվում է օբյեկտի վրա, սինխրոնիզացվում է տվյալների բազայի հետ՝ տրանզակցիայի հաստատում կամ սեսիայի մաքրման ժամանակ:
// 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() |
(մնում է) |