Java aplikacije tradicionalno koriste tehnologije poput JDBC (Java Database Connectivity) za pristup relacijskim bazama podataka kako bi se trajno pohranilo podatke. Glavni problem bila je razlika između objektno orijentirane i relacijske tehnologije. JDBC API zahtijeva od programera da ručno kodiraju najprimitivnije CRUD operacije (kreiraju, čitaju, ažuriraju i brišu) operacije u SQL-u kojima nedostaje prenosivost.
Uz to, kôd je ovisio o SQL-u, što nije standardna specifikacija za relacijske baze podataka, što će otežati prijelaz iz jedne baze podataka u drugu. Problem je u tome što je relacijska tehnologija usmjerena na podatke i njihov odnos, dok objektno orijentirana paradigma ne ističe samo podatke, već i operacije koje se na njima obavljaju. To rezultira neusklađenošću objektno-relacijske impedance. Jedno od široko prihvaćenih rješenja je objektno-relacijsko mapiranje (ORM).
Hibernate je ORM (Object / Relational Mapping) okvir za programski jezik Java koji se bavi postojanošću podataka. Jednostavno je rješenje objektno-relacijskog preslikavanja otvorenog koda koje mapira Java klase u tablice baza podataka u relacijskim bazama podataka i od Java do SQL tipova podataka. To je lagan okvir ORM-a distribuiran pod GNU licencom koji ima za cilj pružiti programerima transparentan mehanizam za postizanje upornosti. Koristi moćan jezik upita sličan SQL-u koji se zove HQL (skraćeno za Hibernate Query Language), koji se brzo integrira s postojećim i novim aplikacijama bez promjene ostatka aplikacije. Uz to, potpuno je u skladu s objektno orijentiranim predodžbama poput nasljeđivanja, polimorfizma i povezanosti. I što je najbolje, ne zahtijevate izmjenu aplikacije klase kako biste postigli upornost.
Java Persistent API ili JPA specifikacija je koja opisuje sučelje za objektno-relacijska preslikavanja i trajno upravljanje objektima. Osim API definicije, on definira skup pravila i smjernica o tome kako implementirati objektno relacijsko mapiranje i kako te specifikacije uskladiti sa svim pružateljima JPA. Hibernacija je najnaprednija i najčešće korištena ORM primjena JPA smjernica. JPA jednostavno pruža platformu za objektno / relacijsko preslikavanje za upravljanje podacima između Java objekata / klasa i relacijske baze podataka u Java aplikacijama. To je specifikacija sučelja dizajnirana za dobavljače implementacije JPA kako bi stvorili standard za implementaciju ORM-a kako bi ciljali zahtjeve sloja pristupačnog podataka za visoke performanse. Hibernacija je najpopularniji dobavljač JPA.
JPA, skraćenica za Java Persistent API, specifikacija je za pristup, upravljanje i trajne podatke u aplikacijama koje koriste Java Platform, Standard Edition (Java, SE) i Java Platform, Enterprise Edition (Java, EE). Hibernacija je, s druge strane, više alat za implementaciju ORM-a koji je u skladu s JPA specifikacijama.
JPA je specifikacija za objektno-relacijsko mapiranje na Javi koja omogućava programerima da mnogo brže i efikasnije obavljaju operacije baze podataka, omogućujući tako jednostavnu interakciju s bazama podataka. To je standardni API za upornost i objektno relacijsko preslikavanje koji pruža nekoliko prednosti programerima za operacije povezivanja podataka. Hibernate je open-source objektni relacijski alat za mapiranje koji pojednostavljuje razvoj Java aplikacija da bi povezivanje s bazama podataka bilo mnogo lakše nego ikad prije.
Problem s JPA je taj što je to samo specifikacija koja ne pruža nijednu klasu implementacije. API je samo skup klasa i metoda za trajno pohranjivanje podataka u bazu podataka prema određenom skupu pravila i propisa kojih se moraju pridržavati dobavljača JPA. Hibernate je jedan od mnogih dobavljača JPA implementacije koji implementira JPA specifikaciju u svako okruženje koje podržava JPA, uključujući Java SE i Java EE poslužitelje aplikacija.
Osim što je najpopularniji dobavljač implementacije JPA, okvir Hibernate zadržava svoj izvorni API za promicanje kompatibilnosti s unatrag, kao i za smještaj nestandardnih značajki. Hibernate dolazi s nekoliko značajki koje ne podržavaju Java persistent API, poput proširenih generatora identifikatora, novih API-ja datuma i vremena, ponavljajućih napomena, rezultata upita za pare, prilagodljivih CRUD izjava, nepromjenjivih entiteta, podrške prirodnih ID-ova, ad hoc pridruživanja nepovezanih entiteta itd.
EntityManager je standard za implementaciju JPA specifikacije koji je isti u svim implementacijama. Naprotiv, ako želite koristiti Hibernate API, tada biste koristili hibernacijsku seansu za rukovanje upornošću. Međutim, nećete moći premjestiti na novog dobavljača ako odlučite koristiti sesiju jer je ograničena na hibernacijske API-je.
Gotovo sve poslovne aplikacije trebaju neki način da uporno pohranjuju podatke. Za poslovne aplikacije od vitalnog je značaja zbog potrebnog pristupa relacijskim bazama podataka. Upornost je temeljni koncept u razvoju aplikacija i sam po sebi predstavlja izazov zbog potrebe da se hijerarhijski strukturirani Java objekti serializiraju u bazu podataka na način koji je istovremeno brz i učinkovit. Iako je upornost već bila vruća tema za raspravu u Java zajednici, mnogi se programeri čak ne slažu oko razmjera problema. U kontekstu objektno orijentiranog jezika, postojanost znači da su podaci još uvijek dostupni i nakon završetka procesa koji je stvorio. Mnogo je načina za trajno pohranjivanje podataka. Hibernacija je jedan takav projekt koji ima za cilj pružiti cjelovito rješenje problema postojanosti u Javi, dok je JPA specifikacija za upravljanje postojanim podacima i objektno-relacijskim preslikavanjem.