Una casistica da tenere in considerazione quando si utilizza
un ORM per la facilitazione dei meccanismi di persistenza è quella in cui il
prodotto software che si intende realizzare dipende da una base dati esistente.
Nel caso di utilizzo di un ORM affermato come Hibernate è
importante conoscere in che maniera si può passare dalle tabelle già esistenti
agli oggetti del nostro software in maniera facilitata (operazione definita
Reverse Engineering).
La presente guida presuppone l’utilizzo di Eclipse 4.3
Kepler con JBoss Tools 4.1.2 Final (scaricabile da http://tools.jboss.org/downloads/jbosstools/kepler/4.1.2.Final.html
)
CREARE UNA BASE DATI
La prima operazione da effettuare è la creazione di una base
dati. Si riporta un esempio banale di due entità: Cliente (Customer) e Ordine
(Ordini). Tra le due entità vi è la seguente relazione: Un Cliente può
effettuare un numero di ordini arbitrario, un ordine può essere associato ad
uno solo cliente. In Figura 1 si riporta lo schema concettuale raffinato con
una strategia Top Down.
Figura 1 - Diagramma E-R
Dopo aver creato le due tabelle si inseriscono dei dati
fittizi (due clienti e due ordini, uno di 10 euro e un altro di 20) seguendo le
seguenti istruzioni SQL:
INSERT INTO `customer` (`id`, `name`,
`surname`) VALUES
(1, 'Mario', 'Rossi'),
(2, 'Bianco', 'Nero');
INSERT INTO `order` (`id`, `tot`, `Customerid`)
VALUES
(1, 10, 1),
(2, 20, 2);
REVERSE ENGINEERING E
GENERAZIONE DEL CODICE
La prima operazione da effettuare è quella di creare un
nuovo progetto Java. Per semplicità si consideri la creazione di un progetto
con un package main all’interno del quale si crea una classe Main. A questo
punto si procede con l’inclusione delle librerie necessarie per l’utilizzo di
Hibernate.
Selezionando il progetto con il destro e accedendo al Build
Path -> Configure Build Path… si seleziona il pulsante Add Library.
Successivamente si sceglie User Library .
A questo punto si crea una libreria di nome Hibernate all’interno
della quale si inseriranno i file jar indicati in Figura
2.
La locazione di questi file jar sul file system dipende da come è stato
installato Hibernate. Utilizzando il JBoss Tool è sufficiente accedere alla
cartella di hibernate presente nella cartella plugin di eclipse.
Figura 2 - Librerie da includere per
utilizzare Hibernate
Prima di poter fare qualsiasi operazione con Hibernate è
necessario creare un file di configurazione: un hibernate.properties o
hibernate.cfg.xml. L’Hibernate Tools fornisce un wizard per la
generazione di questo file, ma prima è necessario sapere quali sono i parametri
di configurazione.
Per essi è necessario possedere i
driver per dialogare con la base dati. Nel caso di MySQL è necessario conoscere
la versione di MySQL installata sul pc. Per fare questo è sufficiente eseguire
la seguente istruzione SQL da qualsiasi client (Esempio: Phpmyadmin) SELECT VERSION().
La versione di riferimento per questo guida è la 5.6.11.
Successivamente è necessario scaricare e installare il
connector mysql (link http://search.maven.org/remotecontent?filepath=mysql/mysql-connector-java/5.1.26/mysql-connector-java-5.1.26.jar
)
Il file .jar deve essere incluso nel runtime classpath.
Classpath -> Add external JAR.
A questo punto, si può procedere alla creazione del file di
configurazione di Hibernate.
Per utilizzare il Wizard è sufficiente cliccare su File
-> New
-> Other
(Ctrl+N), selezionare Hibernate -> Hibernate Configuration File (cfg.xml) e cliccare
su Next.
In Figura 3
sono mostrati i parametri utilizzati. Per il parametro Connection URL bisogna
specificare il nome del db che si vuole accedere con la seguente stringa:
jdbc:mysql://localhost:3306/nomedb
Figura 3 - Parametri di connessione
Successivamente si deve creare un Hibernate Console Configuration al
quale si associerà il file appena creato insieme al progetto. Attraverso questa
operazione sarà possibile testare la connessione al database.
A questo punto per utilizzare il tool del Reverse Engineering bisogna selezionare il tool Hibernate Code
Generation che si trova attraverso l’icona del Run specifica per Hibernate ().
Figura 4 - Hibernate Code Generation Configurations
Le operazioni da svolgere sono:
- Associare il file di Console Configuration
- Spuntare l’opzione Reverse engineer from JDBC Connection
- Scrivere il nome del package all’interno del quale si vogliono generare le classi
- Nella scheda Exporters spuntare Domain Code, Hibernate XML Mappings, Hibernate XML Configuration (quest’ultimo è necessario in quanto il tool inserirà tutti i file di mapping generati in automatico)
- Cliccare su Run
A questo punto si otterrà un package con all’interno le
classi derivate dalle tabelle già esistenti sul database insieme ai file di
mapping. Nell’esempio mostrato le classi saranno due: Customer e Order. Il
Reverse Engineering è stato effettuato.
Per testare che tutto funzioni è opportuno utilizzare il
main dell’applicazione. Si è ipotizzato di voler
recuperare le informazioni del Customer con id uguale a 1 che secondo lo script
SQL creato all’inizio della presente guida è il signor Mario Rossi. Il codice da utilizzare è il seguente:
SessionFactory sessionFactory = new
Configuration().configure().buildSessionFactory();
Session session =
sessionFactory.getCurrentSession();
Integer id = 1;
try {
session.beginTransaction();
Customer dbCustomer = (Customer)
session.get(Customer.class, id);
System.out.println(dbCustomer.getId() + " - " + dbCustomer.getName());
session.getTransaction().commit();
}
catch
(HibernateException e) {
e.printStackTrace();
session.getTransaction().rollback();
}
Se si prova a lanciare l’applicazione si potrebbe incorrere
nel seguente errore:
Exception in thread
"main" org.hibernate.HibernateException: No CurrentSessionContext configured!
Per risolvere è sufficiente accedere al file di configurazione di
hibernate e aggiungere la seguente property:
<property name="hibernate.current_session_context_class">thread</property>
Lanciando il Main dell’applicazione si otterrà in output l’id
(pari a 1) e il nome del Customer già presente nella base dati: 1 – Mario.
0 commenti:
Posta un commento