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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
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 ?