// relation inverse un-�-un
 // r�alis�e par une requ�te JPQL
 public static void test8() {
   EntityTransaction tx = null;
   // nouveau contexte de persistance
   EntityManager em = getNewEntityManager();
   // d�but transaction
   tx = em.getTransaction();
   tx.begin();
   // on r�attache l'adresse a1 au nouveau contexte
   newa1 = em.find(Adresse.class, a1.getId());
   // on r�cup�re la personne propri�taire de cette adresse
   Personne p1 =
       (Personne)
           em.createQuery("select p from Personne p join p.adresse a where a.id=:adresseId")
               .setParameter("adresseId", newa1.getId())
               .getSingleResult();
   // on les affiche
   System.out.println("adresse=" + newa1);
   System.out.println("personne=" + p1);
   // fin transaction
   tx.commit();
 }
 // rollback
 public static void test7() {
   EntityTransaction tx = null;
   try {
     // nouveau contexte de persistance
     EntityManager em = getNewEntityManager();
     // d�but transaction
     tx = em.getTransaction();
     tx.begin();
     // on r�attache l'adresse a1 au nouveau contexte
     newa1 = em.find(Adresse.class, a1.getId());
     // on r�attache l'adresse a4 au nouveau contexte
     newa4 = em.find(Adresse.class, a4.getId());
     // on essaie de les supprimer - devrait lancer une exception car on ne peut supprimer une
     // adresse li�e � une
     // personne, ce qui est le cas de newa1
     em.remove(newa4);
     em.remove(newa1);
     // fin transaction
     tx.commit();
   } catch (RuntimeException e1) {
     // on a eu un pb
     System.out.format(
         "Erreur dans transaction [%s%n%s%n%s%n%s]%n",
         e1.getClass().getName(), e1.getMessage(), e1.getCause(), e1.getCause().getCause());
     try {
       if (tx.isActive()) {
         System.out.println("Rollback en cours...");
         tx.rollback();
       }
     } catch (RuntimeException e2) {
       System.out.format("Erreur au rollback [%s]%n", e2.getMessage());
     }
     // on abandonne le contexte courant
     em.clear();
   }
   // dump - la table Adresse n'a pas du changer � cause du rollback
   dumpAdresse();
 }
 // supprimer un objet Adresse
 public static void test6() {
   EntityTransaction tx = null;
   // nouveau contexte de persistance
   EntityManager em = getNewEntityManager();
   // d�but transaction
   tx = em.getTransaction();
   tx.begin();
   // on r�attache l'adresse a3 au nouveau contexte
   a3 = em.find(Adresse.class, a3.getId());
   System.out.println(a3);
   // on la supprime
   em.remove(a3);
   // fin transaction
   tx.commit();
   // dump table Adresse
   dumpAdresse();
 }