Hibernacja - sesje
Sesja służy do uzyskania fizycznego połączenia z bazą danych. Obiekt Session jest lekki i zaprojektowany do jego tworzenia za każdym razem, gdy wymagana jest interakcja z bazą danych. Trwałe obiekty są zapisywane i pobierane za pośrednictwem obiektu Session.
Obiekty sesji nie powinny być otwarte przez długi czas, ponieważ zazwyczaj nie są bezpieczne dla wątków i powinny być tworzone i niszczone w razie potrzeby. Główną funkcją sesji jest oferowanie, tworzenie, odczytywanie i usuwanie operacji dla instancji mapowanych klas jednostek.
Instancje mogą istnieć w jednym z następujących trzech stanów w danym momencie -
transient - Nowa instancja klasy trwałej, która nie jest powiązana z sesją i nie ma reprezentacji w bazie danych, a żadna wartość identyfikatora nie jest uznawana przez Hibernate za przejściową.
persistent- Możesz uczynić przejściową instancję trwałą, kojarząc ją z sesją. Trwała instancja ma reprezentację w bazie danych, wartość identyfikatora i jest powiązana z sesją.
detached - Po zamknięciu sesji hibernacji instancja trwała stanie się instancją odłączoną.
Wystąpienie sesji można serializować, jeśli jego trwałe klasy są możliwe do serializacji. Typowa transakcja powinna używać następującego idiomu -
Session session = factory.openSession();
Transaction tx = null;
try {
tx = session.beginTransaction();
// do some work
...
tx.commit();
}
catch (Exception e) {
if (tx!=null) tx.rollback();
e.printStackTrace();
} finally {
session.close();
}
Jeśli sesja zgłasza wyjątek, transakcja musi zostać wycofana, a sesja musi zostać odrzucona.
Metody interfejsu sesji
Istnieje wiele metod udostępnianych przez Sessioninterfejs, ale mam zamiar wymienić tylko kilka ważnych metod, których użyjemy w tym samouczku. Pełną listę metod powiązanych z programem Hibernate można znaleźć w dokumentacji HibernateSession i SessionFactory.
| Sr.No. | Metody i opis sesji |
|---|---|
| 1 | Transaction beginTransaction() Rozpocznij jednostkę pracy i zwróć powiązany obiekt transakcji. |
| 2 | void cancelQuery() Anuluj wykonanie bieżącego zapytania. |
| 3 | void clear() Całkowicie wyczyść sesję. |
| 4 | Connection close() Zakończ sesję, zwalniając połączenie JDBC i czyszcząc. |
| 5 | Criteria createCriteria(Class persistentClass) Utwórz nową instancję Criteria dla danej klasy encji lub nadklasę klasy encji. |
| 6 | Criteria createCriteria(String entityName) Utwórz nową instancję Criteria dla podanej nazwy jednostki. |
| 7 | Serializable getIdentifier(Object object) Zwróć wartość identyfikatora danej jednostki skojarzonej z tą sesją. |
| 8 | Query createFilter(Object collection, String queryString) Utwórz nowe wystąpienie zapytania dla danej kolekcji i ciągu filtru. |
| 9 | Query createQuery(String queryString) Utwórz nowe wystąpienie zapytania dla danego ciągu zapytania HQL. |
| 10 | SQLQuery createSQLQuery(String queryString) Utwórz nowe wystąpienie SQLQuery dla danego ciągu zapytania SQL. |
| 11 | void delete(Object object) Usuń trwałą instancję z magazynu danych. |
| 12 | void delete(String entityName, Object object) Usuń trwałą instancję z magazynu danych. |
| 13 | Session get(String entityName, Serializable id) Zwróć trwałe wystąpienie danej nazwanej jednostki z podanym identyfikatorem lub null, jeśli nie ma takiego trwałego wystąpienia. |
| 14 | SessionFactory getSessionFactory() Pobierz fabrykę sesji, która utworzyła tę sesję. |
| 15 | void refresh(Object object) Przeczytaj ponownie stan danej instancji z podstawowej bazy danych. |
| 16 | Transaction getTransaction() Pobierz instancję transakcji powiązaną z tą sesją. |
| 17 | boolean isConnected() Sprawdź, czy sesja jest aktualnie połączona. |
| 18 | boolean isDirty() Czy ta sesja zawiera jakieś zmiany, które należy zsynchronizować z bazą danych? |
| 19 | boolean isOpen() Sprawdź, czy sesja jest nadal otwarta. |
| 20 | Serializable save(Object object) Utrwalaj daną instancję przejściową, najpierw przypisując wygenerowany identyfikator. |
| 21 | void saveOrUpdate(Object object) Zapisz (obiekt) lub zaktualizuj (obiekt) daną instancję. |
| 22 | void update(Object object) Zaktualizuj instancję trwałą o identyfikator danej odłączonej instancji. |
| 23 | void update(String entityName, Object object) Zaktualizuj instancję trwałą o identyfikator danej odłączonej instancji. |