Bonjour,
Je trouve dans la console Eclipse cette erreur :
10:52:34,836 WARN [SeamPhaseListener] uncaught exception, passing to exception handler
java.lang.IllegalStateException: Could not commit transaction
at org.jboss.seam.jsf.SeamPhaseListener.commitOrRollback(SeamPhaseListener.java:625)
...
Caused by: javax.persistence.RollbackException: Error while commiting the transaction
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:71)
...
Caused by: org.hibernate.validator.InvalidStateException: validation failed for: org.domain.stamas.entity.ThEtudiantEtu
at org.hibernate.validator.event.ValidateEventListener.validate(ValidateEventListener.java:148)
at org.hibernate.validator.event.ValidateEventListener.onPreUpdate(ValidateEventListener.java:177)
at org.hibernate.action.EntityUpdateAction.preUpdate(EntityUpdateAction.java:237)
at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:88)
at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:279)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:263)
at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:168)
at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:50)
at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1027)
at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:365)
at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:137)
at org.hibernate.ejb.TransactionImpl.commit(TransactionImpl.java:54)
... 43 more
Déjà, ce que j'ai du mal à comprendre, vu que je débute dans le monde Hibernate, c'est pourquoi cette entité apparaît alors que je ne m'en sers pas.
Dans ma BDD et dans mes entités, ThEtudiantEtu hérite de ThCandidatCnd qui hérite de ThUtilisateurUti qui hérite de TePersonnePrs.
Dans Authenticator.java, je fais une requête sur ThUtilisateurUti pour vérifier le login de l'utilisateur puis je le redirige sur sa page d'accueil en fonction de son type utilisateur.
En l'occurrence, l'utilisateur est bien un étudiant mais je n'ai pas besoin de ses propriétés d'étudiant pour le moment.

Ce qui m'étonne encore plus, c'est que je viens de voir que dans le log, ça parle d'EntityUpdateAction alors que je ne fais aucun Update jusque là.

Voici ThEtudiantEtu :
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
/**
 * ThEtudiantEtu generated by hbm2java
 */
@Entity
@Table(name = "th_etudiant_etu")
@PrimaryKeyJoinColumn(name = "etu_id_candidat", referencedColumnName = "cnd_id_utilisateur")
public class ThEtudiantEtu extends ThCandidatCnd implements java.io.Serializable {
 
    private int etuIdCandidat;
    private TeEtablissementEtb teEtablissementEtb;
    //private ThCandidatCnd thCandidatCnd;
    private TeConcoursCcr teConcoursCcr;
    private TrCommuneCmn trCommuneCmn;
    private String etuAdresse;
    private String etuCodePostal;
    private Date etuDateNaissance;
 
    public ThEtudiantEtu() {
    }
 
    public ThEtudiantEtu(TeEtablissementEtb teEtablissementEtb,
            /*ThCandidatCnd thCandidatCnd,*/ TeConcoursCcr teConcoursCcr,
            TrCommuneCmn trCommuneCmn, String etuAdresse, String etuCodePostal,
            Date etuDateNaissance) {
        this.teEtablissementEtb = teEtablissementEtb;
        //this.thCandidatCnd = thCandidatCnd;
        this.teConcoursCcr = teConcoursCcr;
        this.trCommuneCmn = trCommuneCmn;
        this.etuAdresse = etuAdresse;
        this.etuCodePostal = etuCodePostal;
        this.etuDateNaissance = etuDateNaissance;
    }
 
    @GenericGenerator(name = "genEtudiant", strategy = "foreign", parameters = @Parameter(name = "property", value = "thCandidatCnd"))
    //@Id
    @GeneratedValue(generator = "genEtudiant")
    //@Column(name = "etu_id_candidat", unique = true, nullable = false)
    @Transient
    public int getEtuIdCandidat() {
        return this.etuIdCandidat;
    }
 
    public void setEtuIdCandidat(int etuIdCandidat) {
        this.etuIdCandidat = etuIdCandidat;
    }
 
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "etu_id_etablissement_origine", nullable = false)
    @NotNull
    public TeEtablissementEtb getTeEtablissementEtb() {
        return this.teEtablissementEtb;
    }
 
    public void setTeEtablissementEtb(TeEtablissementEtb teEtablissementEtb) {
        this.teEtablissementEtb = teEtablissementEtb;
    }
 
    /*@OneToOne(fetch = FetchType.LAZY)
    //@PrimaryKeyJoinColumn(name = "etu_id_candidat")
    @NotNull
    public ThCandidatCnd getThCandidatCnd() {
        return this.thCandidatCnd;
    }
 
    public void setThCandidatCnd(ThCandidatCnd thCandidatCnd) {
        this.thCandidatCnd = thCandidatCnd;
    }*/
 
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "etu_id_concours", nullable = false)
    @NotNull
    public TeConcoursCcr getTeConcoursCcr() {
        return this.teConcoursCcr;
    }
 
    public void setTeConcoursCcr(TeConcoursCcr teConcoursCcr) {
        this.teConcoursCcr = teConcoursCcr;
    }
 
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "etu_id_commune_residence", nullable = false)
    @NotNull
    public TrCommuneCmn getTrCommuneCmn() {
        return this.trCommuneCmn;
    }
 
    public void setTrCommuneCmn(TrCommuneCmn trCommuneCmn) {
        this.trCommuneCmn = trCommuneCmn;
    }
 
    @Column(name = "etu_adresse", nullable = false, length = 100)
    @NotNull
    @Length(max = 100)
    public String getEtuAdresse() {
        return this.etuAdresse;
    }
 
    public void setEtuAdresse(String etuAdresse) {
        this.etuAdresse = etuAdresse;
    }
 
    @Column(name = "etu_code_postal", nullable = false, columnDefinition = "char", length = 5)
    @NotNull
    @Length(max = 5)
    public String getEtuCodePostal() {
        return this.etuCodePostal;
    }
 
    public void setEtuCodePostal(String etuCodePostal) {
        this.etuCodePostal = etuCodePostal;
    }
 
    @Temporal(TemporalType.DATE)
    @Column(name = "etu_date_naissance", nullable = false, length = 10)
    @NotNull
    public Date getEtuDateNaissance() {
        return this.etuDateNaissance;
    }
 
    public void setEtuDateNaissance(Date etuDateNaissance) {
        this.etuDateNaissance = etuDateNaissance;
    }
 
}
Suite à cette discussion, il a été un peu trafiqué à cause de l'héritage qui n'a pas été détecté par Hibernate lors de la génération par Seam Generate Entities puisqu'il s'agit d'une BDD MySQL dans laquelle il n'existe aucune instruction claire indiquant l'héritage des tables, les clés étrangères sur les identifiants n'étant pas suffisants.

Les valeurs dans la table de la BDD sont correctes quant aux définitions de l'entité donc je ne vois pas ce qui cloche.

Il y a un moyen de détecter plus précisément la cause de cette erreur de validation ?