Le applicazioni Java utilizzavano tradizionalmente tecnologie come JDBC (Java Database Connectivity) per accedere ai database relazionali al fine di archiviare i dati in modo persistente. Il problema principale era la differenza tra tecnologie orientate agli oggetti e relazionali. L'API JDBC richiederebbe agli sviluppatori di codificare manualmente le operazioni CRUD più primitive (creare, leggere, aggiornare ed eliminare) in SQL che mancava di portabilità.
Inoltre, il codice era totalmente dipendente da SQL, che non è una specifica standard per i database relazionali, il che renderebbe più difficile la transizione da un database all'altro. Il problema è che la tecnologia relazionale è focalizzata sui dati e sulla loro relazione, mentre il paradigma orientato agli oggetti enfatizza non solo i dati ma anche le operazioni eseguite su di esso. Ciò si traduce nella mancata corrispondenza dell'impedenza relazionale dell'oggetto. Una soluzione ampiamente accettata è la mappatura oggettuale relazionale (ORM).
Hibernate è un framework ORM (Object / Relational Mapping) per il linguaggio di programmazione Java che riguarda la persistenza dei dati. È semplicemente una soluzione di mapping relazionale a oggetti open source che associa classi Java a tabelle di database in database relazionali e da tipi di dati Java a SQL. Si tratta di un framework ORM leggero distribuito sotto licenza GNU che mira a fornire agli sviluppatori un meccanismo trasparente per raggiungere la persistenza. Utilizza un potente linguaggio di query simile all'SQL chiamato HQL (abbreviazione di Hibernate Query Language), che si integra rapidamente con entrambe le applicazioni esistenti e nuove senza modificare il resto dell'applicazione. Inoltre, è pienamente conforme alle nozioni orientate agli oggetti come ereditarietà, polimorfismo e associazione. E la parte migliore, non richiede di modificare la classe dell'applicazione per raggiungere la persistenza.
Java Persistence API, o JPA, è una specifica che descrive l'interfaccia per i mapping relazionali agli oggetti e la gestione persistente degli oggetti. Oltre alla definizione dell'API, definisce l'insieme di regole e linee guida su come implementare la mappatura relazionale dell'oggetto e come rendere queste specifiche conformi a tutti i provider JPA. Hibernate è l'implementazione ORM più avanzata e ampiamente utilizzata delle linee guida JPA. JPA fornisce semplicemente la piattaforma object / relational mapping per la gestione dei dati tra oggetti / classi Java e un database relazionale in applicazioni Java. Si tratta di una specifica di interfaccia progettata per i fornitori di implementazione JPA per creare uno standard per l'implementazione ORM al fine di indirizzare i requisiti del livello di accesso ai dati ad alte prestazioni. Hibernate è il più popolare rivenditore JPA.
JPA, abbreviazione di Java Persistence API, è una specifica per l'accesso, la gestione e la persistenza dei dati nelle applicazioni che utilizzano Java Platform, Standard Edition (Java, SE) e Java Platform, Enterprise Edition (Java, EE). Hibernate, d'altra parte, è più uno strumento per l'implementazione ORM che è conforme alle specifiche JPA.
JPA è una specifica per il mapping relazionale di oggetti in Java che consente agli sviluppatori di eseguire operazioni di database in modo molto più rapido ed efficiente, consentendo in tal modo una facile interazione con i database. È l'API standard per la persistenza e la mappatura relazionale di oggetti che offre numerosi vantaggi agli sviluppatori per le operazioni di associazione dei dati. Hibernate è uno strumento di mappatura relazionale Object open source che semplifica lo sviluppo di applicazioni Java per rendere la connessione ai database molto più semplice che mai.
Il problema con JPA è che è solo una specifica che non fornisce alcuna classe di implementazione. L'API è solo una raccolta di classi e metodi per archiviare i dati in modo permanente in un database seguendo una serie specifica di regole e regolamenti che devono essere seguiti dai fornitori JPA. Hibernate è uno dei molti fornitori di implementazione JPA che implementa le specifiche JPA in qualsiasi ambiente che supporta JPA, inclusi i server di applicazioni Java SE e Java EE.
Oltre ad essere il più diffuso fornitore di implementazioni JPA, il framework Hibernate mantiene la sua API nativa per promuovere la retrocompatibilità e per supportare funzionalità non standard. Hibernate include diverse funzionalità che non sono supportate da Java Persistence API come generatori di identificatori estesi, nuove API Date e Time, annotazioni ripetibili, risultati di query vapore, istruzioni CRUD personalizzabili, entità immutabili, supporto di ID naturali, join ad hoc di entità non correlate , eccetera.
EntityManager è lo standard per l'implementazione delle specifiche JPA che è uguale per tutte le implementazioni. Al contrario, se si desidera utilizzare l'API di Hibernate, si utilizzerà la sessione specifica di Sospensione per gestire la persistenza. Tuttavia, non potrai migrare a un nuovo fornitore se scegli di utilizzare Session perché è limitato alle API di Hibernate.
Quasi tutte le applicazioni aziendali hanno bisogno di un modo per archiviare i dati in modo persistente. È vitale per le applicazioni aziendali a causa dell'accesso necessario ai database relazionali. La persistenza è un concetto fondamentale nello sviluppo di applicazioni ed è una sfida di per sé a causa della necessità di serializzare gli oggetti Java gerarchicamente strutturati in un database in modo rapido ed efficiente. Mentre la persistenza è già stata un argomento di discussione nella comunità Java, molti sviluppatori non sono nemmeno d'accordo sulla portata del problema. Nel contesto del linguaggio orientato agli oggetti, persistenza significa che i dati sono ancora accessibili anche dopo che il processo che lo ha creato è terminato. Esistono molti modi per archiviare i dati in modo persistente. Hibernate è uno di questi progetti che mira a fornire una soluzione completa al problema della persistenza in Java, mentre JPA è una specifica per la gestione dei dati persistenti e dei mapping relazionali agli oggetti.