change the transaction in DAO, in case it's in transaction and block all, add exception

This commit is contained in:
Vu Tuan Minh
2025-10-24 23:11:47 +02:00
parent 0553fc13f7
commit d55e48b7e4
4 changed files with 154 additions and 81 deletions

View File

@@ -12,71 +12,97 @@ import fr.istic.taa.jaxrs.metier.Utilisateur;
import jakarta.persistence.EntityTransaction; import jakarta.persistence.EntityTransaction;
public class QuestionDAO extends AbstractJpaDao<Integer, Question> { public class QuestionDAO extends AbstractJpaDao<Integer, Question> {
public QuestionDAO(){ public QuestionDAO() {
super(); super();
this.setClass(Question.class); this.setClass(Question.class);
} }
public void addReponse(String reponse, int questionId) {
public void addReponse(String reponse, int questionId){
EntityTransaction t = em.getTransaction(); EntityTransaction t = em.getTransaction();
t.begin(); try {
Question q = em.find(Question.class,questionId); if (!t.isActive()) t.begin();
Question q = em.find(Question.class, questionId);
q.getReponse().getReponses().add(reponse); if (q != null && q.getReponse() != null) {
em.merge(q); q.getReponse().getReponses().add(reponse);
t.commit(); em.merge(q);
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
}
} }
public void deleteReponse(int questionId) {
public void deleteReponse( int questionId) {
EntityTransaction t = em.getTransaction(); EntityTransaction t = em.getTransaction();
t.begin(); try {
Question q = em.find(Question.class,questionId); if (!t.isActive()) t.begin();
Question q = em.find(Question.class, questionId);
q.getReponse().setReponses(new ArrayList<>()); if (q != null && q.getReponse() != null) {
em.merge(q); q.getReponse().setReponses(new ArrayList<>());
t.commit(); em.merge(q);
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
}
} }
public void setReponse(Reponse rep, Integer id) { public void setReponse(Reponse rep, Integer id) {
EntityTransaction t = em.getTransaction(); EntityTransaction t = em.getTransaction();
t.begin(); try {
Question q = em.find(Question.class,id); if (!t.isActive()) t.begin();
q.setReponse(rep); Question q = em.find(Question.class, id);
em.merge(q); if (q != null) {
t.commit(); q.setReponse(rep);
em.merge(q);
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
}
} }
public void setChoix(Integer id) { public void setChoix(Integer id) {
setReponse(new Choix(),id); setReponse(new Choix(), id);
} }
public void setReponseCourte(Integer id) { public void setReponseCourte(Integer id) {
setReponse(new ReponseCourte(),id); setReponse(new ReponseCourte(), id);
} }
public void addChoix(Integer id, String choix) { public void addChoix(Integer id, String choix) {
EntityTransaction t = em.getTransaction(); EntityTransaction t = em.getTransaction();
t.begin(); try {
Question q = em.find(Question.class,id); if (!t.isActive()) t.begin();
Question q = em.find(Question.class, id);
((Choix)q.getReponse()).getChoix().add(choix); if (q != null && q.getReponse() instanceof Choix) {
em.merge(q); ((Choix) q.getReponse()).getChoix().add(choix);
t.commit(); em.merge(q);
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
}
} }
public void changeQuestion(String newQuestion, Integer id) { public void changeQuestion(String newQuestion, Integer id) {
EntityTransaction t = em.getTransaction(); EntityTransaction t = em.getTransaction();
t.begin(); try {
Question q = em.find(Question.class,id); if (!t.isActive()) t.begin();
q.setQuestion(newQuestion); Question q = em.find(Question.class, id);
em.merge(q); if (q != null) {
t.commit(); q.setQuestion(newQuestion);
em.merge(q);
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
}
} }
} }

View File

@@ -10,23 +10,39 @@ public class QuizzDAO extends AbstractJpaDao<Integer, Quizz> {
this.setClass(Quizz.class); this.setClass(Quizz.class);
} }
public void deleteAllQustion(int quizz_id){ public void deleteAllQustion(int quizzId) {
EntityTransaction et= em.getTransaction(); EntityTransaction t = em.getTransaction();
et.begin(); try {
Quizz quizz = em.find(Quizz.class, quizz_id); if (!t.isActive()) t.begin();
quizz.getQuestions().clear(); Quizz quizz = em.find(Quizz.class, quizzId);
em.merge(quizz); if (quizz != null) {
et.commit(); quizz.getQuestions().clear();
em.merge(quizz); // ✅ merge instead of persist
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
throw e;
}
} }
public void addQuestion(int quizz_id, int question_id){ public void addQuestion(int quizzId, int questionId) {
EntityTransaction et= em.getTransaction(); EntityTransaction t = em.getTransaction();
et.begin(); try {
Quizz quizz = em.find(Quizz.class, quizz_id); if (!t.isActive()) t.begin();
Question question =em.find(Question.class, question_id); Quizz quizz = em.find(Quizz.class, quizzId);
Question question = em.find(Question.class, questionId);
quizz.getQuestions().add(question); if (quizz != null && question != null) {
em.merge(quizz); quizz.getQuestions().add(question);
et.commit(); em.merge(quizz);
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
throw e;
}
} }
} }

View File

@@ -13,15 +13,21 @@ public class SessionDAO extends AbstractJpaDao<Integer, Session> {
this.setClass(Session.class); this.setClass(Session.class);
} }
public List<Session> findByTheme(String theme){ public List<Session> findByTheme(String theme) {
EntityTransaction t=em.getTransaction(); EntityTransaction t = em.getTransaction();
Query query=em.createQuery("select s from Session s where s.theme=:theme"); try {
query.setParameter("theme",theme); if (!t.isActive()) {
List<Session> sessions=query.getResultList(); t.begin();
if(sessions.size()>0){ }
Query query = em.createQuery("SELECT s FROM Session s WHERE s.theme = :theme", Session.class);
query.setParameter("theme", theme);
List<Session> sessions = query.getResultList();
t.commit();
return sessions; return sessions;
}else{ } catch (Exception e) {
return null; if (t.isActive()) t.rollback();
e.printStackTrace();
throw e;
} }
} }
} }

View File

@@ -13,28 +13,53 @@ public class UtilisateurDAO extends AbstractJpaDao<Integer, Utilisateur> {
} }
public Utilisateur findByEmail(String email) { public Utilisateur findByEmail(String email) {
List<Utilisateur> results = List<Utilisateur> results = em.createQuery(
em.createQuery("SELECT u FROM Utilisateur u WHERE u.email = :email", Utilisateur.class) "SELECT u FROM Utilisateur u WHERE u.email = :email", Utilisateur.class)
.setParameter("email", email).getResultList(); .setParameter("email", email)
.getResultList();
return results.isEmpty() ? null : results.get(0);
}
if (results.isEmpty()) { public void addToSession(int userId, int sessionId) {
return null; EntityTransaction t = em.getTransaction();
} else { try {
return results.get(0); if (!t.isActive()) {
t.begin();
}
Session s = em.find(Session.class, sessionId);
Utilisateur u = em.find(Utilisateur.class, userId);
if (s == null || u == null) {
throw new IllegalArgumentException("User or session not found");
}
if (!u.getSession().contains(s)) {
u.getSession().add(s);
em.merge(u);
}
t.commit();
} catch (Exception e) {
if (t.isActive()) t.rollback();
e.printStackTrace();
throw e;
} }
} }
public void addToSession(int sessionId, int userId) { @Override
public void create(Utilisateur entity) {
EntityTransaction t = em.getTransaction(); EntityTransaction t = em.getTransaction();
t.begin(); try {
Session s = em.find(Session.class, sessionId); if (!t.isActive()) {
Utilisateur u = em.find(Utilisateur.class, userId); t.begin();
}
//FAUT AJOUTER OWNING SIDE ( Ici u --> s) em.merge(entity);
u.getSession().add(s); t.commit();
//Jsp il faut birectionnelle ou pas? } catch (Exception e) {
//s.getUtilisateurs().add(u); if (t.isActive()) t.rollback();
em.merge(u); e.printStackTrace();
t.commit(); throw e;
}
} }
} }