package com.objis.demohibernate; import java.util.Date; import java.util.List; import java.util.Set; import org.hibernate.classic.Session; import org.hibernate.criterion.Restrictions; import org.hibernate.Criteria; import org.hibernate.Hibernate; import org.hibernate.Query; import org.hibernate.Transaction; import com.objis.demohibernate.complexe.Formateur; import com.objis.demohibernate.complexe.Formation; import com.objis.demohibernate.complexe.FormationInter; import com.objis.demohibernate.complexe.FormationIntra; import com.objis.demohibernate.complexe.Lieu; import com.objis.demohibernate.simple.util.HibernateUtil; import org.hibernate.stat.Statistics; public class DemoHibernate { public static void main(String[] args) { //insertion(); chargement(); //demoUpdate(); //demoMerge1(); //demoMerge2(); //demoMerge3(); //requeteHqlFormateurs(); //requetePolymorpheFormations(); //requeteCriteriaFormateurs(); //testCacheSessionNiveau1(); //demoProxies(); } public static void insertion(){ // 1 : Ouverture unité de travail hibernate Session session = HibernateUtil.getSessionFactory().openSession(); // 2 : Ouverture transaction Transaction tx = session.beginTransaction(); // Statistiques Statistics stats = HibernateUtil.getSessionFactory().getStatistics(); //EntityStatistics entityStats = HibernateUtil.getSessionFactory().c; // 3 : Instanciation Objets métiers Lieu lieu1 = new Lieu("So@t","104, bis rue de Reuilly, 75012 Paris"); // Lieu formation Lieu lieu2 = new Lieu("Objis","425,cours Emile Zola, 69100 Villeurbanne"); Lieu lieu3 = new Lieu("Objis","37 bis rue des 3 bornes, 75011 Paris"); Formateur formateur1 = new Formateur("Mbiandou","Douglas",10); // Formateur 1 Formateur formateur2 = new Formateur("Hanafi","Morad",8); // Formateur 2 Set formateurs = new java.util.HashSet(2); // Collection Formateurs formateurs.add(formateur1); formateurs.add(formateur2); Formation formation = new Formation("Hibernate",new Date(),3,lieu2,formateurs); FormationIntra formationIntra = new FormationIntra("EJB3",new Date(),3,lieu1,formateurs,"FORT"); //INTRA FormationInter formationInter = new FormationInter("SPRING",new Date(),3,lieu3,formateurs,4); //INTER Long lieuId1 = (Long) session.save(lieu1); // Persistance lieu 1 Long lieuId2 = (Long) session.save(lieu2); // Persistance lieu 2 Long lieuId3 = (Long) session.save(lieu3); // Persistance lieu 3 System.out.println("Clés primaire Lieu : " + lieuId1 + " " + lieuId2 + " " + lieuId3); Long formationId = (Long) session.save(formation); // Persistance formation System.out.println("Clé primaire formation :" + formationId); Long formationIntraId = (Long) session.save(formationIntra); // Persistance formation Intra System.out.println("Clé primaire formation intra:" + formationIntraId); Long formationInterId = (Long) session.save(formationInter); // Persistance formation Inter System.out.println("Clé primaire formation inter :" + formationInterId); // 5 : Fermeture transaction tx.commit(); // 6 : Fermeture unité de travail hibernate session.close(); stats.logSummary(); } public static void chargement(){ // 1 : Ouverture unité de travail hibernate Session session = HibernateUtil.getSessionFactory().openSession(); // 2 : Ouverture transaction //Transaction tx = session.beginTransaction(); // 3 : Récup Formation (Chargement d'une formation à partir de son Id) Formation formation = (Formation) session.get(Formation.class,new Long(3)); // 4 : Récup proxy formateurs () et manipulation objets Formateur Set formateurs = formation.getFormateurs(); for (Formateur formateur : formateurs) { String nomformateur = formateur.getNom(); System.out.println(nomformateur); } // 5 : Fermeture transaction //tx.commit(); // 6 : Fermeture unité de travail hibernate session.close(); } @SuppressWarnings("unused") public static void demoMerge1(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); // 3 : Récup Formation (Chargement d'une formation à partir de son Id=3) Formation formation = (Formation) session.get(Formation.class,new Long(3)); tx.commit(); session.close(); // Ici Objet formation détaché !!!! formation.setTheme("ajax"); Session session2 = HibernateUtil.getSessionFactory().openSession(); Transaction tx2 = session2.beginTransaction(); // 3 : Récup Formation (Chargement d'une formation à partir de son Id=3) Formation formation2 = (Formation) session2.get(Formation.class,new Long(3)); formation2.setTheme("SOA"); session2.update(formation); // Génère exception org.hibernate.NonUniqueObjectException: tx2.commit(); session2.close(); } @SuppressWarnings("unused") public static void demoMerge2(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); // 3 : Récup Formation (Chargement d'une formation à partir de son Id=3) Formation formation = (Formation) session.get(Formation.class,new Long(3)); tx.commit(); session.close(); // Ici Objet formation détaché !!!! formation.setTheme("ajax"); Session session2 = HibernateUtil.getSessionFactory().openSession(); Transaction tx2 = session2.beginTransaction(); // 3 : Récup Formation (Chargement d'une formation à partir de son Id=3) Formation formation2 = (Formation) session2.get(Formation.class,new Long(3)); session2.merge(formation); // Pas d'exception copie de formation dans formation2. RQ : formation2 non modifié. Résultat en base : champ SPRING de enregistrement 3 formation remplacé par ajax tx2.commit(); session2.close(); } public static void demoMerge3(){ Session session = HibernateUtil.getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); // 3 : Récup Formation (Chargement d'une formation à partir de son Id=3) Formation formation = (Formation) session.get(Formation.class,new Long(3)); tx.commit(); session.close(); // Ici Objet formation détaché !!!! formation.setTheme("ajax"); Session session2 = HibernateUtil.getSessionFactory().openSession(); Transaction tx2 = session2.beginTransaction(); // 3 : Récup Formation (Chargement d'une formation à partir de son Id=3) Formation formation2 = (Formation) session2.get(Formation.class,new Long(3)); formation2.setTheme("SOA"); formation2.setDuree(5); Formation formation3 = (Formation)session2.merge(formation); // Pas d'exception System.out.println("Theme : " + formation3.getTheme() + " , durée : "+ formation3.getDuree() ); tx2.commit(); session2.close(); } }