Exemple04_ExempleCompletPersistance1RetourTélécharger Cet exemple reprend l exemple du cours (Employe, Departement, Projet) Mis en evidence de la persistances des liens d'association entre les objets. Cet exemple utilise les notations. L'objet est persistant dans la session d'hibernate README.txt Il faut installer 3 éléments : - EasyPHP pour pouvoir créer une base de données MySQL - le connecteur java jdbc : http://dev.mysql.com/downloads/connector/j télécharger le driver Connector/J 8.1.0 : platform independaent : au format zip copier mysql-connector-j-8.1.0.jar à la racine - hibernate : http://hibernate.org/orm/ télécharger hibernate-release-4.3.6.Final.zip Afin que l'exemple soit autonome, on a copie dans le répertoire de l'exemple les .jar de hibernate-release-4.3.6.Final/lib/required suivants : antlr-2.7.7.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.5.Final.jar hibernate-core-4.3.6.Final.jar hibernate-jpa-2.1-api-1.0.0.Final.jar javassist-3.18.1-GA.jar jboss-logging-3.1.3.GA.jar jboss-transaction-api_1.2_spec-1.0.0.Final.jar Exemple04.java // Cet exemple reprend l exemple du cours (Employe, Departement, Projet) // Mis en evidence de la persistances des liens d'association entre les objets. // // Cet exemple utilise les notations. L'objet est persistant dans la session d'hibernate // import org.hibernate.*; import org.hibernate.cfg.*; import java.sql.*; import java.util.*; import fr.cnam.test.*; import fr.cnam.util.*; public class Exemple04 { public static void main(String[] args) throws Exception { java.util.logging.Logger.getLogger("org.hibernate").setLevel(java.util.logging.Level.OFF); // Creation des objets : run1.bat // if (args[0].equals("creer")) { Configuration config = new Configuration(); SessionFactory sessionFactory = config.configure("hibernate.cfg.xml").buildSessionFactory(); Session session = sessionFactory.openSession(); try { // Departement dep = (Departement)session.get(Departement.class,1); if (dep==null) dep=new Departement(1,"Physique","Toulouse"); session.persist(dep); // Si on execute une 2eme fois, les elements ne sont pas // ajoutes une 2eme fois car la collection est un Set // // Employe e1 = new Employe(123,"LAFORGUE", "Jacques", "30/09/1991", new Contrat(10), new Contact("0561722050","xx","yy")); Employe e2 = new Employe(245,"LAFONT", "Pierre", "31/10/1980", new Contrat(11), new Contact("0612345678","aa","bb")); Employe e3 = new Employe(246,"DUPONT", "Jules", "22/01/1983", new Contrat(12), new Contact("0578452367","dd","ff")); Employe e4 = new Employe(247,"DURAND", "Jules", "22/01/1983", new Contrat(13), new Contact("0678563423","","")); dep.ajouterEmploye(e1); dep.ajouterEmploye(e2); dep.ajouterEmploye(e3); dep.ajouterEmploye(e4); e2.setSuperieur(e1); e3.setSuperieur(e2); e4.setSuperieur(e2); Projet p1 = new Projet("RD15001","Drone surveillance"); Projet p2 = new Projet("FR15001","Cours NFA031"); Projet p3 = new Projet("FR15002","Cours NFA032"); dep.ajouterProjet(p1); dep.ajouterProjet(p2); dep.ajouterProjet(p3); p1.ajouterEmploye(e2); p2.ajouterEmploye(e2); p3.ajouterEmploye(e2); p1.ajouterEmploye(e1); p1.ajouterEmploye(e3); p2.ajouterEmploye(e3); // Affichage du departement dep.aff(); // On peut remarquer que la 1ere fois, les Id sont nulls car pas // encore déterminés par une ecriture en base de donnees System.out.println("Avant flush"); Terminal.lireString(); // Ecriture en base de donnees session.flush(); dep.supprimerEmploye(123); System.out.println("******* APRES SUPPRESSION ****"); dep.aff(); // Ecriture en base de donnees System.out.println("Avant flush"); Terminal.lireString(); session.flush(); } catch (Exception e) { e.printStackTrace(); throw e; } finally { session.close(); } sessionFactory.close(); } //creer // Lecture des objets : run2.bat // if (args[0].equals("lire")) { Configuration config = new Configuration(); SessionFactory sessionFactory = config.configure("hibernate.cfg.xml").buildSessionFactory(); Session session = sessionFactory.openSession(); System.out.println("====== FINDER ============"); Scanner sc = new Scanner(System.in); System.out.println("Chercher:"); String choix = Terminal.lireString(); List<Employe> l = Employe.finder(session,choix); for(Employe e:l) e.aff(); System.out.println("==========================="); // Acces au 1er departement Departement dep = (Departement)session.get(Departement.class,1); // Affichage du departement dep.aff(); session.close(); sessionFactory.close(); }//lire }//main }//class compil.bat mkdir bin del /f /s /q bin\*.class del /f /s /q bin\*.xml javac -d bin -classpath ".;hibernate-core-4.3.6.Final.jar;hibernate-jpa-2.1-api-1.0.0.Final.jar" Exemple04.java fr/cnam/test/MySQL5MyISAMDialect.java copy hibernate.cfg.xml bin pause fr cnam test Contact.java package fr.cnam.test; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.transform.*; import javax.persistence.*; import java.io.*; import java.util.*; // Classe de definition des elements pour // contacter l'employe // @Embeddable public class Contact implements Serializable { // Il n'y a pas de Id car cette classe // est Embedded (inclus dans la table // associe a l'instance d'appartenance // Nummero de telephone de l'employe @Column private String telephonePersonnel; // Adresse postale de l'employe @Column private String adressePostale; // Adresse mail de l'employe @Column private String adresseMail; // Constrcuteur par defaut public Contact(){} // Constructeur applicatif // public Contact(String tel,String adp, String adm) { telephonePersonnel = tel; adressePostale = adp; adresseMail = adm; } public String getTelephonePersonnel(){return telephonePersonnel;} public String getAdressePostale(){return adressePostale;} public String getAdresseMail(){return adresseMail;} public void setTelephonePersonnel(String tel){telephonePersonnel=tel;} public void setAdressePostale(String adr){adressePostale=adr;} public void setAdresseMail(String adr){adresseMail=adr;} } Contrat.java package fr.cnam.test; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.transform.*; import javax.persistence.*; import java.io.*; import java.util.*; // Classe de definition d'un contrat de travail // @Entity @Table(name="Contrat") public class Contrat implements Serializable { // Clef d'un contrat @Id @GeneratedValue private Integer idContrat; // Numero du contrat @Column private Integer numeroContrat; // Constructeur par defaut // public Contrat(){} // Constructeur applicatif // public Contrat(int numeroContrat) { this.numeroContrat = numeroContrat; } public Integer getIdContrat(){return idContrat;} public Integer getNumeroContrat(){return numeroContrat;} public void setIdContrat(Integer id){idContrat=id;} public void setNumeroContrat(Integer num){numeroContrat=num;} } Departement.java package fr.cnam.test; import javax.persistence.*; import java.util.*; import java.io.*; // Classe de definition d'un departement // qui contient des employes et des projets // // Un employe appartient a un et un seul departement // Un employe peut appartenir a plusieurs projets // @Entity @Table(name="Departement") public class Departement implements Serializable { // Clef de departement @Id @GeneratedValue private Integer idDep; // Numero du departement // Le numero est unique et permet d'identifier // le département parmi les autres @Column private Integer numero; // Nom du departement @Column private String nom; // Lieu du departement @Column private String lieu; // La liste des employes du departement // // L'attribut orphanRemoval=true provoque la suppression des // employes de la table qui ont été supprimes dans la collection // (Cas du lien de composition et non d'agregation) // @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER,orphanRemoval=true) @JoinColumn(name="idDepartement") private Set<Employe> employes; // La liste des projets du departement // @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinColumn(name="idDepartement") private Set<Projet> projets; // Constructeur utilise par la persistance // public Departement() { idDep=0; numero=0; nom=""; lieu=""; employes = new HashSet<Employe>(); projets = new HashSet<Projet>(); } // Constructeur applicatif // public Departement(int numero,String nom,String lieu) { this.numero = numero; this.nom = nom; this.lieu = lieu; employes = new HashSet<Employe>(); projets = new HashSet<Projet>(); } // Ajouter un employe dans la collection // public void ajouterEmploye(Employe employe) { employes.add(employe); } // Ajouter un projet dans la collection // public void ajouterProjet(Projet projet) { projets.add(projet); } // Suppression d'un employe // public void supprimerEmploye(Integer matricule) { // Suppression de l'employe de matricule employes.remove(new Employe(matricule)); // Il faut aussi eventuellement supprimer cet // employe des projets auquels il appartient for(Projet p:projets) p.supprimerEmploye(matricule); // Il faut aussi eventuellement mettre a jour // les employes dont il est le superieur for(Employe e:employes) { Employe sup = e.getSuperieur(); if ( (sup!=null) && (e.getSuperieur().getMatricule().intValue()==matricule.intValue())) e.setSuperieur(null); } } // Afficher un departement // public void aff() { System.out.println(String.format("Departement %d %s %s\n", numero,nom,lieu)); for(Employe e:employes) e.aff(); for(Projet p:projets) p.aff(); } } Employe.java package fr.cnam.test; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.transform.*; import org.hibernate.criterion.*; import javax.persistence.*; import java.io.*; import java.util.*; // Classe de definition d'un employe // @Entity @Table(name="Employe") public class Employe implements Serializable { // Clef de l'employe @Id @GeneratedValue private Integer idEmploye; // Le numero de matricule de l'employe // Le numero de matricule est unique et permet d'identifier // l 'employe parmi les autres @Column private Integer matricule; // Nom de l'employe @Column private String nom; // Prenom de l'employe @Column private String prenom; // Date d'embauche de l'employe @Column private String dateEmbauche; @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER,orphanRemoval=true) @JoinColumn(name="contrat") // Clef etrangere dans la table EMPLOYE private Contrat contrat; @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @JoinColumn(name="superieur") // Clef etrangere dans la table EMPLOYE private Employe superieur; @Embedded private Contact contact; // Cet attribut peut ne pas etre cree. // Il correspond au lien bi-directionnel entre // un projet et un employe @Column private Integer idProjet; // Constructeur utilise par Hibernate public Employe() { nom=""; prenom=""; dateEmbauche = null; superieur=null; } // Constructeur applicatif public Employe(int matricule,String nom,String prenom,String dateEmbauche, Contrat contrat, Contact contact) { this.matricule=matricule; this.nom=nom; this.prenom=prenom; this.dateEmbauche=dateEmbauche; this.contrat=contrat; this.contact=contact; this.superieur=null; } // Constructeur pour recherche ou suppression public Employe(int matricule) { this.matricule=matricule; } // Defnition du critere d'unicite de la collectionSet // public boolean equals(Object e) { return ((Employe)e).getMatricule().intValue()==matricule.intValue(); } public int hashCode() // Indispensable pour equals { return matricule.intValue(); } // Affichage d'un employe // public void aff() { System.out.println("============================="); System.out.println(this.toString()); System.out.println("============================="); } public Integer getIdEmploye(){return idEmploye;} public void setIdEmploye(Integer id){idEmploye=id;} public Integer getMatricule(){return matricule;} public void setMatricule(Integer matricule){this.matricule=matricule;} public String getNom(){return nom;} public String getPrenom(){return prenom;} public String getDateEmbauche(){return dateEmbauche;} public Contrat getContrat(){return contrat;} public Contact getContact(){return contact;} public Employe getSuperieur(){return superieur;} public void setNom(String nom){this.nom=nom;} public void setPrenom(String prenom){this.prenom=prenom;} public void setDateEmbauche(String dateEmbauche){this.dateEmbauche=dateEmbauche;} public void setContrat(Contrat c){contrat=c;} public void setContact(Contact c){contact=c;} public void setSuperieur(Employe e){superieur=e;} // public String getTelephonePersonnel(){return contact.getTelephonePersonnel();} public String getAdressePostale(){return contact.getAdressePostale();} public String getAdresseMail(){return contact.getAdresseMail();} public void setTelephonePersonnel(String tel){contact.setTelephonePersonnel(tel);} public void setAdressePostale(String adr){contact.setAdressePostale(adr);} public void setAdresseMail(String adr){contact.setAdresseMail(adr);} // Chaine d'un employe // public String toString() { return String.format("%15s : %03d\n%15s : %03d\n%15s : %-30s\n%15s : %-30s\n%15s : %-10s\n%15s : %-15s\n%15s : %-15s", "Id",getIdEmploye(), "Matricule",matricule, "Nom",nom, "Prenom",prenom, "Date embauche",dateEmbauche, "Contrat",(contrat==null?0:contrat.getNumeroContrat().intValue()), "Contact",(contact==null?"":contact.getTelephonePersonnel()) ); } // Un exemple d'une requete native SQL realise // sur les tables // // Retourne les employes dont la chaine de recherche // est dans le nom // static public List<Employe> finder(Session session,String likeNom) { // Pour assurrer la maj de la base avant de faire une // interrogation de la base de données sans passer // par les objets persistants session.flush(); // Requete de recherche du nom d'un employe List result = session.createCriteria(Employe.class) .add(Restrictions.like("nom","%"+likeNom+"%")) .list(); return (List<Employe>)(result); } } MySQL5MyISAMDialect.java package fr.cnam.test; /* Pour des raisons de compatibilité avec la version du serveur SQL de EasyPHP, il faut surcharger la syntaxe du type de dialecte. Il faut configurer hibernate.cfg.xml avec cette classe. */ import org.hibernate.dialect.MySQLMyISAMDialect; public class MySQL5MyISAMDialect extends MySQLMyISAMDialect { public String getTableTypeString() { return "ENGINE=MyISAM"; } } Projet.java package fr.cnam.test; import org.hibernate.*; import org.hibernate.cfg.*; import org.hibernate.transform.*; import org.hibernate.criterion.*; import javax.persistence.*; import java.io.*; import java.util.*; // Classe de definition d'un projet // @Entity @Table(name="Projet") public class Projet implements Serializable { // Clef d'un projet @Id @GeneratedValue private Integer idProjet; // Code projet @Column private String code; // Nom du projet @Column private String nom; // Les employes qui participent au projet // @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER) //@JoinTable(name="Participation") @JoinColumn(name="idProjet") private Set<Employe> employes; // Constructeur par defaut utilise par la persistence // public Projet() { code=nom=""; employes=new HashSet<Employe>(); } // Constructeur applicatif // public Projet(String code,String nom) { this.code=code; this.nom=nom; employes=new HashSet<Employe>(); } // Methode qui ajoute un employe au projet // public void ajouterEmploye(Employe employe) { employes.add(employe); } // Defnition du critere d'unicite de la collection Set // public boolean equals(Object p) { return ((Projet)p).code.equals(code); } public int hashCode() // Indispensable pour equals { return code.hashCode(); } public String getCode(){return code;} public String getNom(){return nom;} public void setCode(String c){code=c;} public void setNom(String n){nom=n;} public void supprimerEmploye(Integer matricule) { for(Employe e:employes) if (e.getMatricule().intValue()==matricule.intValue()) employes.remove(e); } // Chaine d'un projet // public String toString() { String se="Les membres du projet:\n"; for(Employe e:employes)se=se+e.getNom()+" "+e.getPrenom()+"\n"; return String.format("%15s : %-20s\n%15s : %-20s\n%s", "Code",code, "Nom",nom, se); } // Affichage d'un projete // public void aff() { System.out.println("============================="); System.out.println(this); System.out.println("============================="); } } util hibernate.cfg.xml <?xml version='1.0' encoding='utf-8'?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory> <!-- Database connection settings --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="connection.url">jdbc:mysql://localhost:3306/labo</property> <property name="connection.username">root</property> <property name="connection.password"></property> <property name="connection.useSSL">false</property> <property name="connection.serverTimezone">UTC</property> <!-- JDBC connection pool (use the built-in) --> <property name="connection.pool_size">2</property> <!-- SQL dialect --> <!-- <property name="dialect">org.hibernate.dialect.MySQLISAMDialect</property> --> <property name="dialect">fr.cnam.test.MySQL5MyISAMDialect</property> <!-- Enable Hibernate's automatic session context management --> <property name="current_session_context_class">thread</property> <!-- Disable the second-level cache --> <property name="cache.provider_class">org.hibernate.cache.internal.NoCacheProvider</property> <!-- Echo all executed SQL to stdout --> <property name="hibernate.show_sql">false</property> <!-- Drop and re-create the database schema on startup --> <property name="hbm2ddl.auto">update</property> <mapping class="fr.cnam.test.Employe"/> <mapping class="fr.cnam.test.Departement"/> <mapping class="fr.cnam.test.Contrat"/> <mapping class="fr.cnam.test.Contact"/> <mapping class="fr.cnam.test.Projet"/> </session-factory> </hibernate-configuration> labo.sql -- phpMyAdmin SQL Dump -- version 4.1.4 -- http://www.phpmyadmin.net -- -- Client : 127.0.0.1 -- Généré le : Mer 21 Octobre 2015 à 00:18 -- Version du serveur : 5.6.15-log -- Version de PHP : 5.5.8 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; -- -- Base de données : `labo` -- -- -------------------------------------------------------- -- -- Structure de la table `contrat` -- CREATE TABLE IF NOT EXISTS `contrat` ( `idContrat` int(11) NOT NULL AUTO_INCREMENT, `numeroContrat` int(11) DEFAULT NULL, PRIMARY KEY (`idContrat`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ; -- -- Contenu de la table `contrat` -- INSERT INTO `contrat` (`idContrat`, `numeroContrat`) VALUES (1, 11), (3, 12), (4, 13); -- -------------------------------------------------------- -- -- Structure de la table `departement` -- CREATE TABLE IF NOT EXISTS `departement` ( `idDep` int(11) NOT NULL AUTO_INCREMENT, `lieu` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `nom` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `numero` int(11) DEFAULT NULL, PRIMARY KEY (`idDep`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=2 ; -- -- Contenu de la table `departement` -- INSERT INTO `departement` (`idDep`, `lieu`, `nom`, `numero`) VALUES (1, 'Toulouse', 'Physique', 1); -- -------------------------------------------------------- -- -- Structure de la table `employe` -- CREATE TABLE IF NOT EXISTS `employe` ( `idEmploye` int(11) NOT NULL AUTO_INCREMENT, `adresseMail` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `adressePostale` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `telephonePersonnel` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `dateEmbauche` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `idProjet` int(11) DEFAULT NULL, `matricule` int(11) DEFAULT NULL, `nom` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `prenom` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `contrat` int(11) DEFAULT NULL, `superieur` int(11) DEFAULT NULL, `idDepartement` int(11) DEFAULT NULL, PRIMARY KEY (`idEmploye`), KEY `FK_b2r7cfh39nw02oeko19346grf` (`contrat`), KEY `FK_68dm8pewb2hr3hd784q84ye4a` (`superieur`), KEY `FK_8ixu8p39df5t1wahenknm0s8h` (`idDepartement`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=5 ; -- -- Contenu de la table `employe` -- INSERT INTO `employe` (`idEmploye`, `adresseMail`, `adressePostale`, `telephonePersonnel`, `dateEmbauche`, `idProjet`, `matricule`, `nom`, `prenom`, `contrat`, `superieur`, `idDepartement`) VALUES (2, 'bb', 'aa', '0612345678', '31/10/1980', NULL, 245, 'LAFONT', 'Pierre', 1, NULL, 1), (3, 'ff', 'dd', '0578452367', '22/01/1983', NULL, 246, 'DUPONT', 'Jules', 3, 2, 1), (4, '', '', '0678563423', '22/01/1983', NULL, 247, 'DURAND', 'Jules', 4, 2, 1); -- -------------------------------------------------------- -- -- Structure de la table `participation` -- CREATE TABLE IF NOT EXISTS `participation` ( `Projet_idProjet` int(11) NOT NULL, `employes_idEmploye` int(11) NOT NULL, PRIMARY KEY (`Projet_idProjet`,`employes_idEmploye`), KEY `FK_qusj3fsxg5ev0i6qxgbp2e3yy` (`employes_idEmploye`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -- Contenu de la table `participation` -- INSERT INTO `participation` (`Projet_idProjet`, `employes_idEmploye`) VALUES (1, 2), (1, 3), (2, 2), (2, 3), (3, 2); -- -------------------------------------------------------- -- -- Structure de la table `projet` -- CREATE TABLE IF NOT EXISTS `projet` ( `idProjet` int(11) NOT NULL AUTO_INCREMENT, `code` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `nom` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `idDepartement` int(11) DEFAULT NULL, PRIMARY KEY (`idProjet`), KEY `FK_9lhk46kyx9hulih9764ahl42r` (`idDepartement`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ; -- -- Contenu de la table `projet` -- INSERT INTO `projet` (`idProjet`, `code`, `nom`, `idDepartement`) VALUES (1, 'RD15001', 'Drone surveillance', 1), (2, 'FR15001', 'Cours NFA031', 1), (3, 'FR15002', 'Cours NFA032', 1); /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; log4j.properties log4j.logger.org.hibernate.SQL=DEBUG run1_creation.bat cd bin java -classpath ".;../mysql-connector-j-8.1.0.jar;../hibernate-core-4.3.6.Final.jar;../dom4j-1.6.1.jar;../hibernate-commons-annotations-4.0.5.Final.jar;../jboss-logging-3.1.3.GA.jar;../jboss-transaction-api_1.2_spec-1.0.0.Final.jar;../hibernate-jpa-2.1-api-1.0.0.Final.jar;../javassist-3.18.1-GA.jar" Exemple04 creer pause run2_lecture.bat cd bin java -classpath ".;../antlr-2.7.7.jar;../mysql-connector-j-8.1.0.jar;../hibernate-core-4.3.6.Final.jar;../dom4j-1.6.1.jar;../hibernate-commons-annotations-4.0.5.Final.jar;../jboss-logging-3.1.3.GA.jar;../jboss-transaction-api_1.2_spec-1.0.0.Final.jar;../hibernate-jpa-2.1-api-1.0.0.Final.jar;../javassist-3.18.1-GA.jar;../antlr-2.7.7.jar" Exemple04 lire pause