Seconde requête => erreur
Bonjour.
J'utilise SEAM (en débutant donc galère !) mais il semble que mon problème ne soit pas spécifique à SEAM.
Dans le code ci-dessous, je commence par chercher un étudiant puis je lui génère un mot de passe et la seconde requête est censée enregistrer ce mot de passe dans la BDD. La table th_etudiant_etu hérite de la table th_candidat_cnd qui hérite de la table th_utilisateur_uti qui hérite de la table te_personne_prs.
identification.java :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
| public boolean identifier()
{
try
{
log.info("identification.identifier() "
+ "Tentative d'identification avec les paramètres suivants : "
+ "#{identification.nom}, #{identification.prenom}, #{identification.dateNaissance}");
// Recherche de l'étudiant
Query query = entityManager.createQuery(
"from ThEtudiantEtu e " +
"where e.prsNom = :nom " +
"and e.prsPrenom = :prenom " +
"and e.etuDateNaissance = :dateNaissance ");
query.setParameter("nom", this.getNom());
query.setParameter("prenom", this.getPrenom());
query.setParameter("dateNaissance", this.getDateNaissance());
ThEtudiantEtu etudiant = (ThEtudiantEtu) query.getSingleResult();
// Génération de son mot de passe
this.setMotPasse(etudiant.generatePassword(this.getPrenom(), this.getNom()));
log.info("identification.identifier() : affectation du mot de passe #{identification.motPasse}");
Query q2 = entityManager.createQuery(
"UPDATE ThUtilisateurUti uti " +
"SET uti.utiMotPasse = :motPasse " +
"WHERE uti.utiLogin = :login ");
q2.setParameter("motPasse", this.getMotPasse());
q2.setParameter("login",etudiant.getUtiLogin());
q2.executeUpdate();
//identity.addRole(etudiant.getTeTypeUtilisateurTu().getTuLibelle());
credentials.setUsername(etudiant.getUtiLogin());
//credentials.setPassword(etudiant.getUtiMotPasse());
//identity.login();
//facesMessages.add("Votre identifiant de connexion est #{etudiant.getUtiLogin()}");
//facesMessages.add("Votre mot de passe est #{etudiant.getUtiMotPasse()}");
setAdmis(true);
setPageSuivante("/login.xhtml");
//setPageSuivante("/accueilEtudiant.xhtml");
return true;
} |
Et j'obtiens cette erreur, qui intervient au moment de la seconde requête :
Citation:
11:01:34,259 INFO [Identification] identification.identifier() : affectation du mot de passe T191110T
org.hibernate.validator.InvalidStateException: validation failed for: org.domain.stamas.entity.ThEtudiantEtu
at org.hibernate.validator.event.ValidateEventListener.validate(ValidateEventListener.java:148)
...
Si je commente la requête q2 et son exécution, je n'ai plus l'erreur et ma redirection se passe bien.
Quelqu'un peut me dire ce qui ne va pas ?
Est-ce le fait que la seconde requête n'est pas faite sur la même table que la première ?