Poniżej zebrałem najpopularniejsze pytania z Hibernate na jakie zdarzyło mi się odpowiadać w czasie swoich rozmów kwalifikacyjnych. Zestaw pytań i odpowiedzi stanowi skumulowaną wiedzę na temat samego ORM framework oraz związanych z nim pojęć bazodanowych. Udanej nauki!
- Co to jest Hibernate?
- Na czym polega przewaga Hibernate na JDBC?
- Różnica między metodą get () i load ()?
- Jaki jest wymóg, aby obiekt Java stał się encją Hibernetową?
- Jaka jest różnica między metodami save, persist i saveOrUpdate?
-
Co to jest Hibernate?
Hibernate jest tak zwanym framework’em ORM (ang. Object-Relational Mapping), który pozwala programistom skoncentrować się na logice biznesowej, dbając o samo trwałość danych. Programista Java może pisać kod wykorzystując obiekty, a Hibernate zajmuje się tworzeniem tych obiektów z danymi załadowanymi z bazy danych i zapisaniem aktualizacji z powrotem do bazy danych.
-
Na czym polega przewaga Hibernate na JDBC?
Oprócz trwałości, czyli zapisywania i ładowania danych z bazy danych, Hibernate zapewnia również następujące korzyści:
-
- Buforowanie
- Leniwe ładowanie
- Zarządzanie relacjami i dostarczenie kodu umożliwiającego odwzorowania obiektów na dane relacyjne
- Programista jest zwolniony z pisania kodu ładującego / zapisującego dane do bazy danych.
-
-
Różnica między metodą get () i load ()?
Jest to jedno z najczęściej zadawanych pytań w ramach rozmów kwalifikacyjnych na temat Hibernate, odpowiadałem już na nie kilka razy. Kluczowa różnica między metodą get() i load() polega na tym, że load () wygeneruje wyjątek, jeśli nie zostanie znaleziony obiekt o zadanym identyfikatorze. Funkcja get() dla odmiany zwróci wartość null. Inną ważną różnicą jest to, że load() może zwrócić obiekt proxy bez strzelania do bazy danych, obiekt zostanie zaciągnięty z bazy dopiero w momencie gdy będziesz próbował uzyskując dostęp do dowolnego atrybutu innego niż id. Metoda get() zawsze odpytuje bazę danych, więc czasami użycie load () może być szybsze niż metody get() . Sensowne jest używanie metody load(), jeśli wiesz, że obiekt istnieje w bazie, a metoda get (), jeśli nie jesteś pewien istnienia obiektu.
-
Jaki jest wymóg, aby obiekt Java stał się encją Hibernetową?
Klasa nie może być finalna i musi zawierać domyślny konstruktora bezargumentowy.
-
Jaka jest różnica między metodami save, persist i saveOrUpdate?
Wszystkie trzy metody są używane do zapisywania obiektów w bazie danych, ale są miedzy nimi subtelne różnice. Metoda save() może tylko wstawić rekordy do bazy, ale saveOrUpdate () może już wykonać INSERT lub UPDATE rekordu w zależności od tego czy obiekt posiada ustawione id. Ponadto typem zwrotnym save() jest obiekt Serializable, natomiast metoda persist() jest typu void.