GLI EMBEDDED OBJECTS

springIn certi casi la mappatura delle classi non è esattamente uguale alla struttura della tabella. Prendiamo in esame la tabella Premi dove sono stati aggiunti altri campi. Questi elementi sono tipici di una tabella anagrafica, però sono ugualmente stati inseriti nella tabella, anche se in questi casi è bene suddividere le due tabelle. Il nostro obbiettivo è quello di distinguere all’interno delle classi di entità la parte anagrafica da quella che è più informativa dei flussi.

LA CLASSE INFOPREMI

Quindi dobbiamo creare un’altra classe, però questa classe è speciale, è una classe embedded richiamata dalla nostra classe Premi. Ho creato una nuova classe InfoPremi.java che non è una classe di entità. È stata importata a tutti gli effetti nella nostra classe Premi con la notazione @Embedded, mentre la notazione @Embeddable, in InfoPremi indica che questa classe può essere importata in una classe entity.

Premi
Embedded

Ora ci si potrebbe domandare per quale motivo va fatta una cosa del genere? La risposta è che a volte le tabelle possono avere molti campi, allora risulta utile suddividerle in più classi. Dal punto di vista dell’ordine del codice quello che abbiamo fatto è decisamente più leggibile. @Embedded richiamerà tutte le informazioni che sono presenti nella classe InfoPremi. Vai in debug e guarda come sia stata incorporata la classe InfoPremi (immagine sotto riportata).

Debug
InfoPremi

STRATEGIA DI GENERAZIONE DELLA CHIAVE PRIMARIA

È venuto il momento di vedere altre tipologie di strategy di generazione della chiave primaria. Per effettuare delle prove utilizzeremo la tabella Coupons.

Tabella Coupons

La relazione come vedi è uno-a-molti, cioè ad un Cliente possono corrispondere diversi coupons. Creiamo la classe di entità Coupons. Ho creato un nuovo Controller CouponsController, le classi DAO e le classi di Servizio.

Auto

La strategia AUTO lascia ad Hibernate, sulla base della natura del database relazionale, la strategia ottimale per attribuire la chiave primaria. Quando vi è una relazione uno-a-molti bisogna specificare le due vie, una dalla parte Coupons dove la correlazione è molti-a-uno specificata con la notazione @ManyToOne e la notazione @JoinColumn.

@ManyToOne

@JoinColumn(name = “IdCliente”, referencedColumnName = “CODFIDELITY”)

private Clienti cliente;

mentre nella parte clienti la correlazione è uno-a-molti

@OneToMany(fetch = FetchType.EAGER, mappedBy = “cliente”)

 private Set coupons = new HashSet<>();

LA STRATEGIA DI GENERAZIONE DELLA CHIAVE PRIMARIA TABLE

Specifichiamo ora TABLE come strategia di generazione della chiave primaria. Ciò significa che L’Id si deve basare su una specifica tabella. Proviamo a lanciare il programma e vediamo cosa succede. Otteniamo un errore perché Hibernate va a cercare la seguente tabella:

Errore

Anziché lasciare ad Hibernate il compito di andare a creare una specifica tabella abilitando quindi la DDL (Data Definition Language) nella configurazione, creiamo noi una tabella chiamata Progressivi e istruiamo Hibernate ad utilizzare tale tabella.

Progressivi
Table

Stiamo dicendo ad Hibernate cerca Coupons all’interno di una specifica tabella, la tabella Progressivi. Dobbiamo specificare anche con la notazione @GeneratedValue il nome del generatore che sarà Coupons configurato nel TableGenerator. Una volta fatto questo mettiamo in esecuzione l’applicazione e incolliamo nel browser il seguente indirizzo.

http://localhost:8080/AlphaShopv6/coupons/aggiungi/67301895

Verrà inserito un nuovo Coupons con l’identificativo generato mediante la strategia Table. Verrà aggiornata anche la tabella dei Progressivi. In MySQL Server non ho trovato la tabella progressivi, se anche per te è lo stesso ti lascio le istruzioni per crearla e un breve video per l’importazione dei due record da un file .csv disponibile al download.

Copy to Clipboard

DOWNLOAD CODICE DELL’ARTICOLO

AlphaShopV6

AlphaShopV7

Il progetto AlphaShopV6.zip è per il DBMS SQL Server mentre AlphaShopV7.zip è per MySQL.

File CSV

IL LINGUAGGIO JAVA

IL LINGUAGGIO JAVA

LINK AI POST PRECEDENTI

SPRING FRAMEWORK