// 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(); }