Hibernate

Znany też jako:JPAJava Persistence API

Definicja #

Hibernate to open source'owy framework ORM (Object-Relational Mapping) dla Javy, stworzony przez Gavina Kinga w 2001 roku. Automatyzuje mapowanie między obiektami Javy (POJO) a tabelami relacyjnej bazy danych, eliminując konieczność pisania większości kodu JDBC.

Hibernate implementuje standard JPA (Java Persistence API) — specyfikację Java EE/Jakarta EE definiującą interfejsy dla ORM. Dzięki temu aplikacje można pisać korzystając z interfejsów JPA i podmieniać implementację (Hibernate, EclipseLink) bez zmiany kodu biznesowego.

Kluczowe koncepcje Hibernate:

  • Entity — klasa Javy oznaczona @Entity, mapowana na tabelę
  • Session / EntityManager — jednostka pracy, zarządza lifecycle encji i cache'em pierwszego poziomu
  • HQL (Hibernate Query Language) — obiektowy język zapytań analogiczny do SQL
  • JPQL — standardowy podzbiór HQL zdefiniowany w specyfikacji JPA
  • Criteria API — typowane, programatyczne budowanie zapytań
  • Lazy/Eager loading — strategia ładowania powiązanych encji
  • Caching — cache pierwszego poziomu (Session), cache drugiego poziomu (Ehcache, Infinispan)

W ekosystemie Spring Hibernate jest najczęściej używany przez Spring Data JPA, ukrywający bezpośrednią pracę z EntityManager za interfejsami Repository.

Zastosowania #

Hibernate stosuje się do:

  • Mapowania obiektów domenowych na tabele bazy danych w aplikacjach Java enterprise
  • Automatycznego generowania SQL dla operacji CRUD bez ręcznego pisania zapytań
  • Zarządzania relacjami między encjami — @OneToMany, @ManyToMany, @OneToOne
  • Cachowania danych drugiego poziomu dla poprawy wydajności w aplikacjach z dużym odczytem
  • Migracji schematu bazy danych (w połączeniu z Flyway lub Liquibase)

Ścieżka nauki #

Przed nauką Hibernate warto dobrze znać Javę (OOP, kolekcje, adnotacje) oraz podstawy SQL i relacyjnych baz danych.

Zacznij od:

  • Konfiguracja Hibernate z Spring Boot i starter spring-boot-starter-data-jpa
  • Pierwsza encja: @Entity, @Table, @Id, @GeneratedValue, @Column
  • Spring Data JPA RepositoryJpaRepository, metody query by method name
  • Podstawowe relacje: @ManyToOne, @OneToMany

Następnie poznaj:

  • Problem N+1 — jak go wykrywać (show_sql=true) i rozwiązywać (JOIN FETCH, @EntityGraph)
  • Zaawansowane zapytania: JPQL, Criteria API, natywny SQL
  • Lifecycle encji — transient, persistent, detached, removed
  • Cache drugiego poziomu i optymalizacja wydajności

FAQ #

Czym różni się Hibernate od JPA?
JPA (Java Persistence API / Jakarta Persistence) to specyfikacja — zestaw interfejsów i adnotacji bez implementacji. Hibernate to najpopularniejsza implementacja tej specyfikacji. Można pisać kod do interfejsów JPA i używać Hibernate pod spodem, co daje możliwość podmiany dostawcy ORM.
Czym Hibernate różni się od JDBC?
JDBC (Java Database Connectivity) to niskopoziomowe API do bezpośredniego wykonywania SQL. Hibernate abstrahuje od SQL — programista operuje na obiektach Javy, a Hibernate generuje SQL automatycznie. JDBC daje pełną kontrolę, Hibernate upraszcza i przyspiesza development.
Co to jest problem N+1 w Hibernate?
Problem N+1 pojawia się, gdy dla listy N encji Hibernate wykonuje N dodatkowych zapytań SQL (po jednym dla każdej encji) zamiast jednego JOIN-a. Rozwiązuje się go przez JOIN FETCH w JPQL, @EntityGraph lub fetch = FetchType.EAGER (ostrożnie).
Ile zarabia Java Developer znający Hibernate?
Hibernate (Spring Data JPA) jest standardem w aplikacjach Java enterprise. Mid Java Developer zarabia w Polsce od 12 000 do 18 000 zł brutto, senior od 18 000 do 28 000 zł — Hibernate jest jedną z wielu wymaganych umiejętności.
Ostatnia aktualizacja:

Powiązane hasła

Technologie i biblioteki, które najczęściej pojawiają się razem z Hibernate w ogłoszeniach.

Cały słownik IT

Przeglądaj słownik IT alfabetycznie

Wybierz literę, aby zobaczyć wszystkie hasła zaczynające się od niej.