CREAZIONE DELLA ENTITY CLIENTI

spring

Le classi di entità sono la rappresentazione schematica delle tabelle che andremo a modificare o leggere nel nostro database relazionale. Sono simili alle classi di dominio create precedentemente, però hanno un comportamento differente. Il primo passo è la creazione del package dove Hibernate le andrà a cercare. Prima di creare la classe andiamo a vedere nel nostro database relazionale le tabelle coinvolte.

Relations

LA TABELLA CLIENTI

Vediamo la struttura della tabella CLIENTI.

Tabella Clienti

Come si vede il CODFIDELITY è la chiave primaria. Una chiave primaria identifica in maniera univoca una riga della tabella, non potranno esistere due righe aventi lo stesso codice. Ora creiamo la classe entity Clienti. La prima importante notazione da specificare è @Entity. La seconda è @Table, opzionale e serve a far riferimento alla tabella del database relazionale. Richiede un parametro, il name che identifica la tabella. Nel momento in cui diamo alla nostra classe lo stesso nome della tabella allora non abbiamo bisogno di questa notazione. Inseriamo ora i campi privati che devono essere coerenti con i campi del database. La notazione @Id specifica che il campo sarà la chiave primaria della nostra tabella. Hibernate non accetta una classe di entità priva di questa notazione. Fatto questo inseriamo un’altra notazione @Column che identifica nel suo parametro name la colonna della tabella Clienti. Anche qui se il nome del campo privato è lo stesso della tabella, questa notazione è opzionale. Quando abbiamo a che fare con un campo di tipo date dobbiamo inserire la notazione @Temporal.

Entity clienti

CREAZIONE DELLE RELAZIONI TRA CLIENTI E CARDS

La relazione esistente tra CLIENTI e CARDS è ti tipo uno-a-uno, cioè ad un record nella tabella CLIENTI corrisponde un solo record nella tabella CARDS.

Relations

Stessa cosa vale tra la tabella CLIENTI e la tabella UTENTI, la relazione è uno-a-uno. Viceversa, la relazione tra la tabella UTENTI e PROFILI è di uno-a-molti, ad uno stesso utente possono corrispondere diversi profili. Adesso dobbiamo modificare le nostre classi entity in modo che siano coerenti con questi tipi di relazioni. Modifichiamo la classe Clienti aggiungendo la relazione uno-a-uno con la tabella CARDS, questo significa che quando visualizzeremo la tabella Clienti visualizzeremo anche le CARDS. Inseriamo un campo privato Card e una nuova notazione @OneToOne che specifica una relazione uno-a-uno, in questa notazione dobbiamo specificare il FetchType, abbiamo due possibili opzioni, LAZY e EAGER. Con il LAZY i dati verranno caricati solo all’occorrenza, mentre con EAGER verranno sempre caricati i dati della tabella correlata.

LAZY E EAGER

Con il LAZY abbiamo migliori prestazioni in quanto la memoria richiesta è inferiore rispetto all’EAGER. Tuttavia, quando dobbiamo ad esempio caricare i dati in una combo di una tabella correlata la scelta deve essere EAGER. Dobbiamo inoltre inserire un’altra notazione molto importante @PrimaryKeyJoinColumn, che indica che il collegamento avverrà tramite chiave primaria. Una volta modificata la Entity Clienti dobbiamo modificare anche la Entity Cards. Creiamo un nuovo campo privato Clienti e inseriamo la notazione @OneToOne, ma questa volta con il parametro mappedBy=”card”, questo significa che il punto di congiunzione è il campo privato card nella Entity Clienti.

Relations entity clienti

CREAZIONE DELLE RELAZIONI TRA LE ALTRE ENTITIES

La tabella CARDS è una tabella statistica e non può essere modificate, mentre la tabella UTENTI si. Quando si specifica la relazione tra due tabelle che possono essere modificate, non vi è solo un discorso di selezione, ma anche di inserimento, aggiornamento, ed eliminazione. Il parametro CascadeType indicato sul campo privato Utenti nella Entity Clienti indica quali sono le operazioni da compiere in cascata. ALL significa tutte le operazioni possibili, Il parametro OrphanRemoval impostato a true significa che nel momento in cui eliminiamo un record dalla tabella CLIENTI, i record rimasti orfani nella tabella UTENTI verranno anch’essi rimossi. L’ultima relazione che andremo a creare è quella tra la tabella UTENTI e la tabella PROFILI che è del tipo uno-a-molti. Andiamo nella entity Utenti, abbiamo detto che ad un utente possono corrispondere più profili, quindi il nostro campo privato sarà:

private Set<Profili> profili = new HashSet<>();

La notazione da utilizzare è la @OneToMany, le altre opzioni già le conosciamo.

Relazioni entity utenti

INTRODUZIONE ALLA CREAZIONE DELLE QUERY CON IL JPA 2

Nel caso delle entity abbiamo due possibili alternative per generare le query.

JPA

Il JPQL permette di inserire direttamente delle query sulle entity. La Criteria API utilizza tutta una serie di metodi che vengono applicati alle entity.

Criteria API

All’apparenza sembra molto complesso, ma quando lo utilizzeremo vedremo che è abbastanza semplice utilizzare la criteria API. Vediamo un esempio dell’altra tipologia, ovvero il JPQL.

JPQL

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