Le but est de créer un projet JPA qui va intéragir avec une base de données HSQL. Il faut dans un premier temps, aller sur le Moodle de ce cours et télécharger :
Il faut ensuite décompresser les zips puis dans Eclipse, créer un nouveau projet JPA. Il faut ensuite configurer le projet en faisant clique droit dessus et en allant dans Properties puis dans Java Build Path.
Il faut ensuite importer :
.jar
de HSQL qui se nomme [dossier HSQL]/lib/hsqldb.jar
..jar
s qui se trouvent dans [dossier Hibernate]/lib/required
.Ensuite, il faut créer l'entity en elle même en créant une nouvelle classe Java :
package cours; import javax.persistence.Id; import javax.persistence.Entity; @Entity public class Employe { @Id private int id; private String nom; private double salaire; public Employe() { super(); } public Employe(int id, String nom, double salaire) { this.id = id; this.nom = nom; this.salaire = salaire; } public int getId() { return this.id; } public void setId(int id) { this.id = id; } public String getNom() { return this.nom; } public void setNom(String nom) { this.nom = nom; } public double getSalaire() { return this.salaire; } public void setSalaire(double salaire) { this.salaire = salaire; } }
Il faut ensuite créer la classe de service qui permet de gérer les différentes
actions à effectuer sur la base de données (c'est pas obligatoire, on pourrait
tout claquer dans le main
, osef) :
package cours; import javax.persistence.EntityManager; public class EmployeService { protected EntityManager em; public EmployeService(EntityManager em) { this.em = em; } public Employe createEmployee(int id, String nom, double salaire) { Employe employe = new Employe(id, nom, salaire); em.persist(employe); return employe; } public Employe findEmploye(int id) { return em.find(Employe.class, id); } }
Il faut ensuite démarrer le serveur HSQL ; à la racine du dossier décompréssé, il faut taper dans un terminal ou une invite de commande Windaube :
$ java -cp lib/hsqldb.jar org.hsqldb.util.DatabaseManagerSwing
Ensuite, il faut éditer le fichier META-INF/persistence.xml
dans Eclipse
et le configurer pour permettre la connexion à la base de données :
<?xml version="1.0" encoding="UTF-8"?> <persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"> <!-- Changer JPAWoulah avec le nom de votre projet Eclipse par exemple --> <persistence-unit name="JPAWoulah"> <!-- Changer avec le nom de votre package et classe --> <class>cours.Employe</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver" /> <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:mem:.;create=true" /> <property name="javax.persistence.jdbc.user" value="SA" /> <property name="javax.persistence.jdbc.password" value="" /> <property name="hibernate.hbm2ddl.auto" value="update"/> </properties> </persistence-unit> </persistence>
Note : Dans les valeurs données par le prof (fichier
properties
sur Moodle), l'adresse de connexion est différente mais en essayant de configurer HSQL pour qu'il utilise ces paramètres, j'ai uneSQLTransientConnectionException
et impossible de démarrer le serveur.Du coup, le gros soucis c'est que cette configuration stocke la base de données en mémoire donc :
- Il est impossible d'utiliser l'interface qui se lance en démarrant HSQL pour taper des commandes SQL
- Rien n'est sauvegardé ; lorsque le programme sera finit, toutes les valeurs entrées avec JPA seront perdues.
Il faudrait voir avec le prof pourquoi
c'est autant de la merdeça marche pas.
Finalement, il faut créer le main
pour tester le tout :
package cours; import javax.persistence.EntityManager; import javax.persistence.EntityManagerFactory; import javax.persistence.Persistence; public class Main { public static void main(String[] args) { // Changer `JPAWoulah` avec le nom qui est mis au niveau // du `persistence-unit` dans le persistence.xml. EntityManagerFactory emf = Persistence.createEntityManagerFactory("JPAWoulah"); EntityManager em = emf.createEntityManager(); EmployeService service = new EmployeService(em); service.createEmployee(1, "Mouloud", 2200.56); Employe employe = service.findEmploye(1); System.out.println("L'employé " + employe.getId() + " a pour ..."); } }