JPA vs Hibernate
Quasi tutte le applicazioni aziendali sono richieste per accedere regolarmente ai database relazionali. Ma un problema con le tecnologie precedenti (come JDBC) era il disadattamento di impedenza (differenza tra tecnologie orientate agli oggetti e relazionali). Una soluzione per questo problema è stata introdotta attraverso l'introduzione di un livello astratto chiamato Persistence layer, che incapsula l'accesso al database dalla logica aziendale. JPA (Java Persistence API) è un framework dedicato per la gestione dei dati relazionali (utilizzando il livello di persistenza) nelle applicazioni Java. Esistono molte implementazioni di fornitori di JPA utilizzate all'interno della comunità di sviluppatori Java. Hibernate è l'implementazione più popolare di JPA (DataNucleus, EclipseLink e OpenJPA sono alcuni altri). La versione JPA più recente (JPA 2.0) è completamente supportata da Hibernate 3.5, che è stato rilasciato a marzo 2010.
Cos'è l'JPA?
JPA è un framework per la gestione dei dati relazionali per Java. Può essere utilizzato con applicazioni che utilizzano JSE (Java Platform, Standard Edition) o JEE (Java Platform, Enterprise Edition). La sua versione attuale è JPA 2.0, che è stata rilasciata il 10 dicembre 2009. JPA ha sostituito i bean di entità EJB 2.0 e EJB 1.1 (che sono stati pesantemente criticati per essere considerati dei pesi massimi dalla comunità degli sviluppatori Java). Sebbene i bean di entità (in EJB) fornissero oggetti di persistenza, molti sviluppatori erano abituati a utilizzare oggetti relativamente leggeri offerti da DAO (Data Access Objects) e altri framework simili. Di conseguenza, è stata introdotta la JPA, che ha catturato molte delle caratteristiche chiare dei framework menzionati sopra.
La persistenza descritta in JPA copre l'API (definita in javax.persistence), JPQL (Java Platform, Enterprise Edition) e i metadati richiesti per gli oggetti relazionali. Lo stato di un'entità di persistenza viene tipicamente mantenuto in una tabella. Le istanze di un'entità corrispondono a righe della tabella del database relazionale. I metadati sono usati per esprimere le relazioni tra entità. Annotazioni o file descrittori XML separati (distribuiti con l'applicazione) vengono utilizzati per specificare i metadati nelle classi di entità. JPQL, che è simile alle query SQL, viene utilizzato per interrogare le entità memorizzate.
Cos'è l'ibernazione?
Hibernate è un framework che può essere utilizzato per il mapping relazionale agli oggetti destinato al linguaggio di programmazione Java. Più specificamente, è una libreria ORM (object-relational mapping) che può essere utilizzata per mappare il modello relazionale a oggetti nel modello relazionale convenzionale. In termini semplici, crea una mappatura tra classi e tabelle Java in database relazionali, anche tra tipi di dati Java a SQL. Hibernate può anche essere utilizzato per interrogare e recuperare i dati generando chiamate SQL. Pertanto, il programmatore è sollevato dalla gestione manuale dei set di risultati e degli oggetti di conversione. Hibernate è rilasciato come framework libero e open source distribuito sotto licenza GNU. Un'implementazione per l'API JPA viene fornita in Hibernate 3.2 e versioni successive. Gavin King è il fondatore di Hibernate.
Qual è la differenza tra JPA e Hibernate?
JPA è un framework per la gestione dei dati relazionali nelle applicazioni Java, mentre Hibernate è un'implementazione specifica di JPA (quindi idealmente, JPA e Hibernate non possono essere confrontati direttamente). In altre parole, Hibernate è uno dei framework più popolari che implementa JPA. Hibernate implementa JPA tramite le librerie Hibernate Annotation e EntityManager implementate sulle librerie Hibernate Core. Sia EntityManager che Annotations seguono il ciclo di vita di Hibernate. La versione JPA più recente (JPA 2.0) è completamente supportata da Hibernate 3.5. JPA ha il vantaggio di avere un'interfaccia che è standardizzata, quindi la comunità di sviluppatori avrà più familiarità con essa rispetto a Hibernate. D'altra parte, le API native di Hibernate possono essere considerate più potenti perché le sue funzionalità sono un superset di quelle di JPA.