Wat zijn de toestanden van entiteiten in Hibernate?
sobes.tech AI
Antwoord van AI
In Hibernate kan een entiteit zich in een van de volgende staten bevinden:
-
Transient (Tijdelijk): Het object is gemaakt, maar niet gekoppeld aan een Hibernate-sessie. Het heeft geen representatie in de database. Operaties op het worden in het geheugen uitgevoerd, maar beïnvloeden de database niet.
// De entiteit Student is gemaakt, maar niet gekoppeld aan een sessie Student student = new Student("Ivan", "Ivanov"); -
Persistent (Persistent): Het object is gekoppeld aan de huidige Hibernate-sessie en wordt door deze beheerd. Elke wijziging aan het object wordt gesynchroniseerd met de database bij het committen van de transactie of het flushen van de sessie. Een uit de database gelezen object bevindt zich in deze staat.
// De entiteit Student is uit de database gehaald of daarin opgeslagen Session session = sessionFactory.openSession(); session.beginTransaction(); Student student = new Student("Petr", "Petrov"); session.save(student); // student is nu in Persistent-stand // Of // Student student = session.get(Student.class, 1L); // student in Persistent-stand session.getTransaction().commit(); session.close(); -
Detached (Losgekoppeld): Het object was eerder gekoppeld aan een sessie, maar de sessie is gesloten of het object is expliciet losgekoppeld (bijvoorbeeld met
session.evict(object)). Het object bevat nog steeds gegevens uit de database, maar wijzigingen die erin worden aangebracht, worden niet automatisch gesynchroniseerd met de database. Om wijzigingen op te slaan, moet het object opnieuw worden gekoppeld aan een andere sessie.Session session1 = sessionFactory.openSession(); session1.beginTransaction(); Student student = session1.get(Student.class, 1L); // Persistent session1.getTransaction().commit(); session1.close(); // student is nu Detached // Wijzigingen aan het object in Detached-stand beïnvloeden de database niet student.setName("New Name"); // Om de wijzigingen op te slaan, moet het opnieuw worden gekoppeld aan een nieuwe sessie Session session2 = sessionFactory.openSession(); session2.beginTransaction(); session2.update(student); // student wordt weer Persistent session2.getTransaction().commit(); session2.close();
Overgangen tussen staten:
| Van toestand\Naar toestand | Transient | Persistent | Detached |
|---|---|---|---|
| Transient | (blijft) | save(), persist(), saveOrUpdate() |
(niet direct mogelijk) |
| Persistent | (onmogelijk) | (blijft) | close(), evict(), clear() |
| Detached | (onmogelijk) | update(), merge(), saveOrUpdate() |
(blijft) |