Corso JPA Java Persistence API #1 | Introduzione
Quando si parla di persistenza dei dati in Java non si può evitare di riferirsi alle specifiche JPA (Java Persistence API).
In questo corso cercheremo di introdurre concetti, problematiche e soluzioni legate al mondo di Java e dei database.
Partiamo dalle basi introducendo il concetto di ORM (Object Relational Mapping) intorno al quale si sviluppa tutto ciò che andremo ad approfondire in seguito.
Si tratta di una tecnica che permette di mappare i dati tra Java e i database relazionali e che risulta di fondamentale importanza perchè questi due mondi sono di natura incompatibili tra di loro.
In gergo si parla di conflitto di impedenza (impedence mismatch).
Le differenze riguardano sia la rappresentazione dei dati che le modalità di accesso agli stessi.
Con l'ORM ciascuna classe entità si "trasforma" o meglio viene associata ad una tabella e ciascuna istanza ad una riga del database.
Al contrario gli attributi sono associati alle colonne della corrispondente tabella.
Per realizzare questo obiettivo i tool ORM (noti come provider) sfruttano delle opportune specifiche, ovvero le JPA (Java Persistence API).
Quella che segue è la lista dei più noti e diffusi ORM
- Hibernate – open source
- Top Link – by Oracle
- Eclipse Link – by Eclipse Persistence Platform
- Open JPA - by Apache
- MyBatis (noto come iBATIS) – open source.
Va detto che Hibernate è sicuramente al primo posto in questa lista anche perchè è nato prima della stesura delle stesse specifiche e quindi era già ampiamente utilizzato sul campo come una sorta di standard de facto.
Un altro concetto fondamentale è quello di relazione o meglio di associazione.
Circa la terminologia c'è da dire che in italiano utilizziamo "relazione" come sinonimo di tabella e "associazione" per indicare il legame logico tra due relazioni. Al contrario in inglese esiste il termine specifico "relationship".
Quando si stabilisce una associazione questa può essere unidirezionale o bidirezionale in base al fatto che sia percorribile in un solo verso o in entrambi.
In altre parole da una entità si può accedere ai dati dell'altra ed eventualmente fare il viceversa.
Ed anche in questo caso ci troviamo di fronte a due differenti approcci tra il mondo relazionale e quello OOP visto che a livello di database la "navigazione" è solo unidirezionale a partire dalla tabella che contiene la foreign key (chiave esterna).
Per concludere accenniamo ai metadati ovvero alle annotazioni da utlizzare con le classi Java per specificare in forma dichiarativa ciò che vogliamo ottenere a livello di persistenza.
Pur essendo disponibile un'altra modalità basata su file XML, le annotazioni restano la soluzione più pratica con cui specificare le entità, le associazioni, i meccanismi di recupero dei dati e molto altro.
Ma ne parleremo più in dettaglio nei prossimi articoli.