Aplikacje Java tradycyjnie wykorzystywały technologie, takie jak JDBC (Java Database Connectivity), aby uzyskać dostęp do relacyjnych baz danych w celu trwałego przechowywania danych. Głównym problemem była różnica między technologiami obiektowymi a relacyjnymi. Interfejs API JDBC wymagałby od programistów ręcznego kodowania najbardziej prymitywnych operacji CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) w SQL, które nie były przenośne.
Ponadto kod był całkowicie zależny od SQL, co nie jest standardową specyfikacją relacyjnych baz danych, co utrudniłoby przechodzenie z jednej bazy danych do drugiej. Problem polega na tym, że technologia relacyjna koncentruje się na danych i ich relacjach, podczas gdy paradygmat zorientowany obiektowo kładzie nacisk nie tylko na dane, ale także wykonywane na nich operacje. Powoduje to niedopasowanie impedancji obiektowo-relacyjnej. Jednym z powszechnie akceptowanych rozwiązań jest mapowanie obiektowo-relacyjne (ORM).
Hibernacja to struktura ORM (Object / Relational Mapping) dla języka programowania Java, która dotyczy utrwalania danych. Jest to po prostu rozwiązanie mapowania obiektowo-relacyjnego typu open source, które mapuje klasy Java na tabele baz danych w relacyjnych bazach danych oraz z typów danych Java na SQL. Jest to lekki framework ORM dystrybuowany na licencji GNU, którego celem jest zapewnienie programistom przejrzystego mechanizmu pozwalającego na osiągnięcie trwałości. Używa potężnego języka zapytań podobnego do SQL o nazwie HQL (skrót od Hibernate Query Language), który szybko integruje się z istniejącymi i nowymi aplikacjami bez zmiany reszty aplikacji. Ponadto jest w pełni zgodny z obiektowymi pojęciami, takimi jak dziedziczenie, polimorfizm i asocjacja. A najlepsze jest to, że nie trzeba modyfikować klasy aplikacji, aby osiągnąć trwałość.
Interfejs API Java Persistence (JPA) to specyfikacja opisująca interfejs odwzorowań relacyjno-obiektowych i zarządzania obiektami trwałymi. Poza definicją interfejsu API definiuje zestaw reguł i wytycznych dotyczących sposobu implementacji odwzorowania relacyjnego obiektu oraz sposobu dostosowania tych specyfikacji do wszystkich dostawców JPA. Hibernacja jest najbardziej zaawansowaną i szeroko stosowaną implementacją ORM wytycznych JPA. JPA zapewnia po prostu platformę mapowania obiektów / relacji do zarządzania danymi między obiektami / klasami Java a relacyjną bazą danych w aplikacjach Java. Jest to specyfikacja interfejsu zaprojektowana dla dostawców implementacji JPA w celu stworzenia standardu dla implementacji ORM w celu spełnienia wymagań dotyczących warstwy dostępu do danych o wysokiej wydajności. Hibernacja jest najpopularniejszym sprzedawcą JPA.
JPA, skrót od Java Persistence API, to specyfikacja dostępu, zarządzania i utrwalania danych w aplikacjach korzystających z platformy Java, Standard Edition (Java, SE) i platformy Java, Enterprise Edition (Java, EE). Hibernacja jest natomiast narzędziem do implementacji ORM, które jest zgodne ze specyfikacjami JPA.
JPA to specyfikacja mapowania obiektowo-relacyjnego w Javie, która pozwala programistom wykonywać operacje bazy danych znacznie szybciej i wydajniej, umożliwiając w ten sposób łatwą interakcję z bazami danych. Jest to standardowy interfejs API do utrwalania i relacyjnego mapowania obiektowego, który zapewnia programistom szereg korzyści związanych z operacjami wiązania danych. Hibernacja to narzędzie do relacyjnego mapowania obiektów typu open source, które upraszcza tworzenie aplikacji Java, dzięki czemu łączenie się z bazami danych jest znacznie łatwiejsze niż kiedykolwiek.
Problem z JPA polega na tym, że jest to tylko specyfikacja, która nie zapewnia żadnych klas implementacyjnych. Interfejs API to tylko zbiór klas i metod trwałego przechowywania danych w bazie danych zgodnie z określonym zestawem zasad i przepisów, których muszą przestrzegać dostawcy JPA. Hibernacja jest jednym z wielu dostawców implementacji JPA, którzy implementują specyfikację JPA w dowolnym środowisku obsługującym JPA, w tym na serwerach aplikacji Java SE i Java EE.
Oprócz tego, że jest najpopularniejszym dostawcą implementacji JPA, platforma Hibernate zachowuje swój natywny interfejs API w celu promowania zgodności z poprzednimi wersjami oraz dostosowywania niestandardowych funkcji. Hibernacja zawiera kilka funkcji, które nie są obsługiwane przez interfejs API Java Persistence, takich jak rozszerzone generatory identyfikatorów, nowy interfejs API Date and Time, powtarzalne adnotacje, wyniki zapytań Steam, konfigurowalne instrukcje CRUD, niezmienne byty, obsługa identyfikatorów naturalnych, łączenie ad hoc niepowiązanych podmiotów itp.
EntityManager to standard implementacji specyfikacji JPA, który jest taki sam we wszystkich implementacjach. Przeciwnie, jeśli chcesz korzystać z Hibernacji API, wtedy użyjesz specyficznej Sesji Hibernacji do obsługi trwałości. Jednak nie będziesz mógł przeprowadzić migracji do nowego dostawcy, jeśli zdecydujesz się użyć Sesji, ponieważ jest ona ograniczona do interfejsów API Hibernacji.
Prawie wszystkie aplikacje korporacyjne potrzebują trwałego sposobu przechowywania danych. Jest niezbędny dla aplikacji korporacyjnych ze względu na wymagany dostęp do relacyjnych baz danych. Trwałość jest podstawową koncepcją w tworzeniu aplikacji i sama w sobie stanowi wyzwanie ze względu na konieczność serializacji hierarchicznie ustrukturyzowanych obiektów Java do bazy danych w sposób zarówno szybki, jak i wydajny. Chociaż wytrwałość była już gorącym tematem dyskusji w społeczności Java, wielu programistów nawet nie zgodzi się co do zakresu problemu. Trwałość w kontekście języka zorientowanego obiektowo oznacza, że dane są nadal dostępne nawet po zakończeniu procesu, który je utworzył. Istnieje wiele sposobów trwałego przechowywania danych. Hibernacja to jeden z takich projektów, który ma na celu zapewnienie kompletnego rozwiązania problemu trwałości w Javie, podczas gdy JPA jest specyfikacją do zarządzania trwałymi danymi i odwzorowaniami obiektowo-relacyjnymi.