Hibernate – najpopularniejsze pytania z rozmów kwalifikacyjnych

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!

  1. Co to jest Hibernate?
  2. Na czym polega przewaga Hibernate na JDBC?
  3. Różnica między metodą get () i load ()?
  4. Jaki jest wymóg, aby obiekt Java stał się encją Hibernetową?
  5. Jaka jest różnica między metodami save, persist i saveOrUpdate?

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

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

  4. Jaki jest wymóg, aby obiekt Java stał się encją Hibernetową?

    Klasa nie może być finalna i musi zawierać domyślny konstruktora bezargumentowy.

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

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *