Chápem, že JPA 2 je špecifikácia a Hibernate je nástroj pre ORM. Tiež chápem, že Hibernate má viac funkcií ako JPA 2. Ale z praktického hľadiska, aký je v skutočnosti rozdiel?
Mám skúsenosti s používaním iBatisu a teraz'sa snažím naučiť buď Hibernate, alebo JPA2. Vzal som si knihu Pro JPA2 a stále sa v nej spomína "JPA provider". Napríklad:
Ak si myslíte, že nejaká funkcia by mala byť štandardizovaná, mali by ste sa vyjadriť
a požiadať o ňu svojho poskytovateľa JPA
Toto ma mätie, takže mám niekoľko otázok:
Ako uvádzate, JPA je len špecifikácia, čo znamená, že neexistuje žiadna implementácia. Svoje triedy môžete anotovať anotáciami JPA, ako len chcete, avšak bez implementácie sa nič nestane. Predstavte si JPA ako smernice, ktoré sa musia dodržiavať, alebo ako rozhranie, zatiaľ čo implementácia JPA v Hibernate je kód, ktorý spĺňa API definované v špecifikácii JPA a poskytuje funkcie pod kapotou.
Keď používate Hibernate s JPA, používate vlastne implementáciu JPA Hibernate. Výhodou je, že môžete vymeniť implementáciu Hibernate'JPA za inú implementáciu podľa špecifikácie JPA. Keď používate priamo Hibernate, ste uzamknutí v implementácii, pretože iné ORM môžu používať iné metódy/konfigurácie a anotácie, preto nemôžete jednoducho prejsť na iné ORM.
Podrobnejší opis nájdete v mojom blogovom príspevku.
Z Wiki.
Motivácia pre vytvorenie Java Persistence API
Mnohí podnikoví vývojári Javy používajú namiesto entity beans ľahké perzistentné objekty poskytované open-source frameworkami alebo Data Access Objects: entity beans a enterprise beans mali povesť príliš ťažkých a komplikovaných a dalo sa ich používať len v aplikačných serveroch Java EE. Mnohé vlastnosti perzistenčných rámcov tretích strán boli začlenené do Java Persistence API a od roku 2006 sa implementáciou Java Persistence API stali projekty ako Hibernate (verzia 3.2) a Open-Source Version TopLink Essentials.
Ako sa uvádza na stránke JCP, odkaz Eclipse je referenčnou implementáciou pre JPA. Pozrite sa na túto odpoveď, kde sa o tom dozviete trochu viac.
Samotné JPA má vlastnosti, ktoré nahradia štandardný ORM rámec. Keďže JPA je súčasťou špecifikácie Java EE, môžete v projekte použiť samotný JPA a mal by fungovať s akýmikoľvek Java EE kompatibilnými servermi. Áno, tieto servery budú mať implementácie pre špecifikáciu JPA.
Hibernate je najpopulárnejší rámec ORM, akonáhle sa zaviedlo JPA, hibernate sa prispôsobuje špecifikácii JPA. Okrem základného súboru špecifikácií, ktoré by mal dodržiavať, poskytuje hibernate množstvo ďalších vecí.
JPA je špecifikácia na štandardizáciu rozhraní ORM-API. Hibernate je dodávateľom implementácie JPA. Ak teda používate JPA s hibernate, môžete používať štandardné API JPA, hibernate bude pod kapotou ponúkať niektoré ďalšie neštandardné funkcie. Pozri http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/ a http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/.