package jpa; import jakarta.persistence.EntityManager; import jakarta.persistence.EntityTransaction; import jakarta.persistence.criteria.*; import metier.*; import java.util.ArrayList; import java.util.List; public class JpaTest { private EntityManager manager; public JpaTest(EntityManager manager) { this.manager = manager; } /** * @param args */ public static void main(String[] args) { EntityManager manager = EntityManagerHelper.getEntityManager(); JpaTest test = new JpaTest(manager); EntityTransaction tx = manager.getTransaction(); tx.begin(); try { test.create_user_test(); test.create_session_test(); test.create_quizz_test(1,1); test.list_utilisateur(); test.list_session(); test.list_quizz(); } catch (Exception e) { e.printStackTrace(); } tx.commit(); manager.close(); EntityManagerHelper.closeEntityManagerFactory(); System.out.println(".. done"); } private void create_user_test() { int numUser = manager.createQuery("SELECT u FROM Utilisateur u", Utilisateur.class).getResultList().size(); if (numUser == 0) { //Utilisateur Utilisateur utilisateur1 = new Utilisateur(); utilisateur1.setName("Titi"); utilisateur1.setEmail("titi@email.com"); utilisateur1.setPassword("123456"); Utilisateur utilisateur2 = new Utilisateur(); utilisateur2.setName("Toto"); manager.persist(utilisateur1); manager.persist(utilisateur2); } } private void create_session_test() { int numUser = manager.createQuery("SELECT u FROM Session u", Session.class).getResultList().size(); if (numUser == 0) { //Utilisateur Session session1 = new Session(); session1.setCodePIN(1703); session1.setTheme("Inphormatik"); session1.setQuizzs(new ArrayList<>()); List ulist = manager.createQuery("select user from Utilisateur user").getResultList(); session1.setUtilisateurs(ulist); manager.persist(session1); } } private void list_utilisateur() { CriteriaBuilder criteriaBuilder = manager.getCriteriaBuilder(); CriteriaQuery query = criteriaBuilder.createQuery(Utilisateur.class); Root from = query.from(Utilisateur.class); query.select(from); List result_utilisatuer_list = manager.createQuery(query).getResultList(); for (Utilisateur u : result_utilisatuer_list) { System.out.println(u.getId() + " " + u.getName() + " " + u.getEmail()); } } private void list_session() { CriteriaBuilder criteriaBuilder = manager.getCriteriaBuilder(); CriteriaQuery query = criteriaBuilder.createQuery(Session.class); Root from = query.from(Session.class); query.select(from); List result_session_list = manager.createQuery(query).getResultList(); for (Session s : result_session_list) { System.out.println(s.getCodePIN() + " " + s.getTheme()); for (Utilisateur u : s.getUtilisateurs()) { System.out.println(u.getId() + " " + u.getName() + " " + u.getEmail()); } } } private void create_quizz_test(int userId, int sessionId) { CriteriaBuilder cb = manager.getCriteriaBuilder(); //GET USER CriteriaQuery cqUser = cb.createQuery(Utilisateur.class); Root userRoot = cqUser.from(Utilisateur.class); cqUser.select(userRoot).where(cb.equal(userRoot.get("id"), userId)); Utilisateur u1 = manager.createQuery(cqUser).getSingleResult(); //GET SESSION CriteriaQuery cqSess = cb.createQuery(Session.class); Root sessRoot = cqSess.from(Session.class); cqSess.select(sessRoot).where(cb.equal(sessRoot.get("id"), sessionId)); Session s1 = manager.createQuery(cqSess).getSingleResult(); List ls= u1.getSessions(); ls.add(s1); u1.setSessions(ls); Quizz quizz1 = new Quizz(); quizz1.setCreateur(u1); quizz1.getSessions().add(s1); manager.persist(quizz1); manager.merge(u1); manager.persist(s1); } private void list_quizz() { CriteriaBuilder cb = manager.getCriteriaBuilder(); CriteriaQuery cq = cb.createQuery(Quizz.class); Root from = cq.from(Quizz.class); List sessionIds = new ArrayList<>(); sessionIds.add(1); //https://www.w3schools.com/SQL/sql_join_inner.asp //https://stackoverflow.com/questions/15990141/how-to-make-a-criteriabuilder-join-with-a-custom-on-condition Join sessionJoin = from.join("session", JoinType.INNER); cq.select(from).where(sessionJoin.get("id").in(sessionIds)); List quizzs = manager.createQuery(cq).getResultList(); for (Quizz q : quizzs) { System.out.println("Quizz ID: " + q.getId() + ", User: " + q.getCreateur().getName() + ", nb session: " + q.getSessions().size()); } } }