Jeg forstår at JPA 2 er en spesifikasjon og Hibernate er et verktøy for ORM. Jeg forstår også at Hibernate har flere funksjoner enn JPA 2. Men fra et praktisk synspunkt, hva er egentlig forskjellen?
Jeg har erfaring med å bruke iBatis, og nå prøver jeg å lære enten Hibernate eller JPA2. Jeg plukket opp Pro JPA2-boken, og den fortsetter å henvise til "JPA-leverandør". For eksempel:
Hvis du mener at en funksjon bør standardiseres, bør du si ifra og be om det fra JPA-leverandøren din.
Dette forvirrer meg, så jeg har noen spørsmål:
Som du sier er JPA bare en spesifikasjon, noe som betyr at det ikke er noen implementering. Du kan kommentere klassene dine så mye du vil med JPA-kommentarer, men uten en implementering vil ingenting skje. Tenk på JPA som retningslinjene som må følges eller et grensesnitt, mens Hibernate&# 39s JPA-implementering er kode som oppfyller API som definert av JPA-spesifikasjonen og gir funksjonaliteten under panseret.
Når du bruker Hibernate med JPA, bruker du faktisk Hibernate JPA-implementeringen. Fordelen med dette er at du kan bytte ut Hibernates implementering av JPA med en annen implementering av JPA-spesifikasjonen. Når du bruker direkte Hibernate, låser du deg til implementeringen fordi andre ORM-er kan bruke andre metoder/konfigurasjoner og merknader, og du kan derfor ikke bare bytte til en annen ORM.
For en mer detaljert beskrivelse, les mitt blogginnlegg.
Fra Wiki.
Motivasjon for å lage Java Persistence API.
Mange enterprise Java-utviklere bruker lette persistente objekter levert av rammeverk med åpen kildekode eller Data Access Objects i stedet for entity beans: entity beans og enterprise beans hadde rykte på seg for å være for tunge og kompliserte, og man kunne bare bruke dem i Java EE-applikasjonsservere. Mange av funksjonene i tredjeparts persistensrammeverk ble innlemmet i Java Persistence API, og fra 2006 har prosjekter som Hibernate (versjon 3.2) og Open-Source Version TopLink Essentials blitt implementeringer av Java Persistence API.
Som fortalt på JCP-siden er Eclipse-lenken referanseimplementasjonen for JPA. Se dette svaret for litt mer om dette.
JPA i seg selv har funksjoner som vil gjøre opp for et standard ORM-rammeverk. Siden JPA er en del av Java EE-spesifikasjonen, kan du bruke JPA alene i et prosjekt, og det bør fungere med alle Java EE-kompatible servere. Ja, disse serverne vil ha implementasjonene for JPA-spesifikasjonen.
Hibernate er det mest populære ORM-rammeverket, etter at JPA ble introdusert er Hibernate i samsvar med JPA-spesifikasjonene. Bortsett fra det grunnleggende settet med spesifikasjoner som det skal følge, gir dvalemodus en hel del ekstra ting.
JPA er en spesifikasjon for å standardisere ORM-API-er. Hibernate er en leverandør av en JPA-implementering. Så hvis du bruker JPA med hibernate, kan du bruke standard JPA API, hibernate vil være under panseret, og tilbyr noen flere ikke-standardfunksjoner. Se http://docs.jboss.org/hibernate/stable/entitymanager/reference/en/html_single/ og http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/