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. |