Bonjour,
Je trouve dans la console Eclipse cette erreur :
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.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
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 :
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.
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; } }
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 ?
Partager