JPA E HIBERNATE

springGli oggetti dei prossimi articoli saranno due framework molto importanti che riguardano lo strato di persistenza. JPA e Hibernate. Hibernate ORM (o semplicemente Hibernate) è uno strumento di mapping relazionale di oggetti per il linguaggio di programmazione Java. Fornisce un framework per mappare un modello di dominio orientato agli oggetti su un database relazionale. Sostituisce gli accessi diretti e persistenti al database con funzioni di gestione degli oggetti di alto livello. Hibernate è un software gratuito distribuito sotto la GNU Lesser General Public License 2.1.La caratteristica principale di Hibernate è il mapping dalle classi Java alle tabelle del database e la mappatura dai tipi di dati Java ai tipi di dati SQL. Hibernate fornisce anche funzionalità di query e recupero dei dati. Genera chiamate SQL e solleva lo sviluppatore dalla gestione manuale e dalla conversione degli oggetti del set di risultati.

Introduzione
Hibernate JPA

Vediamo di analizzare lo schema di funzionamento di Hibernate. Si parte con una classe Java POJO (Plain Old Java Object) , i dati viaggiano tramite il JPA e Hibernate nel database relazionale. Il JDBC che abbiamo usato fino adesso non viene completamente accantonato, ma rimane sempre necessario per stabilire le connessioni ai vari DBMS.

Hibernate e JPA

I POJO prendono il nome di entity e rappresentano la trasposizione delle tabelle dei database relazionali in classi Java, oppure query, come avremo modo di vedere possiamo creare entità che si basano su query. Abbiamo visto che l’utilizzo del driver JDBC, di codice T-SQL e Store Procedure producono l’effetto desiderato, allora perché introdurre due nuovi Framework? Vediamo quali sono i vantaggi.

Vantaggi di Hibernate

HIBERNATE E LA SICUREZZA

Oltre a questi benefici dobbiamo aggiungere l’elemento della sicurezza, Hibernate non è soggetto ad attacchi di Sql Injection. Questo perché non si ha codice SQL, o meglio il codice SQL viene generato da Hibernate dietro le quinte.

MODIFICA POM.XML

POM.xml

GLI OBBIETTIVI DI QUESTA SEZIONE

Avremo modo di aggiungere la gestione dei clienti, faremo in modo di poter configurare un utente ad accedere al nostro database tramite la sua password, od ogni utente potrà essere associato uno o più profili. Abbiamo detto che gli ORM semplificano le operazioni nel nostro database, le tabelle interessate sono quelle riportate nello schema. Anche se gli ORM semplificano la gestione dei database è sempre buona norma analizzarli, questo per due motivi, il primo è che le entità rappresenteranno le tabelle e le relative relazioni, e in secondo luogo è fondamentale conoscere le caratteristiche del database che si sta modificando.

LE RELAZIONI TRA LE TABELLE INTERESSATE

Come vedi dallo schema riportato la relazione che intercorre tra la tabella CLIENTI e la tabella UTENTI è uno-ad-uno, cioè un cliente ha associata una sola riga nella tabella UTENTI. Gli utenti sono quelli interessati ad entrare nel nostro sito, ma possono esistere anche clienti non interessati ad accedere al sito, che quindi non avranno una riga nella tabella UTENTI. La relazione che intercorre invece tra la tabella UTENTI e PROFILI è uno-a-molti, cioè ad un utente potranno essere associati più profili.

Tabelle

CREAZIONE DELLE CLASSI JAVA DI CONFIGURAZIONE HIBERNATE

Adesso è giunto il momento di creare la classe di configurazione, che permetterà ad Hibernate di connettersi alla nostra fonte dati. La connessione avviene sempre tramite il JDBC. Creiamo una nuova classe HibernateConfig.java. Come hai visto fare più volte in cima la classe inseriamo la notazione @Configuration, tramite questa notazione l’IOC caricherà la classe allo startup dell’applicazione. La seconda notazione è @EnableTransactionManagement, ciò significa che tutte le attività svolte sul database relazionale avranno il meccanismo delle transazioni abilitate.

TRANSAZIONI

Se l’operazione è svolta in più fasi se una di esse non va a buon fine verrà fatto il rollback di tutte le altre. In poche parole, verranno annullate tutte le modifiche apportate dalle fasi precedenti. In caso contrario, cioè non vi sono errori verrà fatto il commit della transazione. Tutto questo è gestito automaticamente da Hibernate. La terza notazione la conosciamo è la @ComponentScan che dirà ad Hibernate dove andare a cercare i file di configurazione. L’ultima la @PropertySource dirà ad Hibernate dove andare a cercare tutte le variabili di configurazione che abbiamo inserito. La prima riga di codice di cui abbiamo fatto l’Autowired è la classe Environment, questo significa che accederemo alle specifiche di configurazione scritte in application.properties tramite questa classe. Vediamo il file.

application.properties

L’altra classe di cui abbiamo fatto il code injection è il DataSource specificata nella classe JdbcConfig. Questo e lo ribadisco, perché Hibernate utilizza il JDBC per connettersi alla base dati. Dobbiamo inoltre disabilitare la gestione delle transazioni di cui si occupava il JDBC in quanto sarà Hibernate a gestirle. Il primo Bean che creeremo è il più importante in quanto gestisce l’Entity Manager. Il codice è spiegato passo dopo passo, e puoi consultarlo scaricando il progetto di tuo interesse.

HibernateConfig

DOWNLOAD CODICE DELL’ARTICOLO

AlphaShopV6

AlphaShopV7

Il progetto AlphaShopV6.zip è per il DBMS SQL Server mentre AlphaShopV7.zip è per MySQL. Ti consiglio di provare a utilizzare l’editor Intellij IDEA, è un ottimo editor ricco di funzionalità tra cui uno strumento molto potente come AI.

IL LINGUAGGIO JAVA

IL LINGUAGGIO JAVA

LINK AI POST PRECEDENTI

SPRING FRAMEWORK