Bonjour,
Je suis occupé avec une Enterprise Application que je développe sous Netbeans 6.5. Elle communique avec une base de données Derby et le Serveur d'applic est Glassfish v2. Le module WebApplication utilise le framework JSF.
Mon problème se produit lorsque je tente de rajouter un enregistrement dans une des tables de ma base de données.
J'ai droit à une erreur Http500 qui me dit par exemple au final :
Je pensais au départ que le problème venait du fait que les clés de mes autres tables étaient auto-générées. Le message ci-dessus spécifiait alors [cle = null] vu que je ne la passait pas en paramètres pour la création de l'enregistrement.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Cause racine java.lang.IllegalArgumentException: Object: entities.Test[cle=10] is not a known entity type.
J'ai donc créé une nouvelle table ("test") qui ne dispose pas de clé auto-générée mais le problème persiste (si je puis dire...bon ok mauvais jeu de mot).
Voici l'architecture de l'appli : l'utilisateur clique sur un commandlink dans une jsp, qui appelle la méthode record du managed bean spécifié.
Voici la méthode :
je passe ensuite l'objet test créé à la méthode create de l'interface locale de mon stateless bean, qui se trouve dans un module ejb appartenant à l'enterprise application.
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 public class MyTest { @EJB private TestFacadeLocal tfl1; //stateless bean private String corps; private Integer cle; ... public String record(){ cle=new Integer(10); corps="fdehfieiegfh"; Test test=new Test (cle,corps); //construction d'un objet Test tfl1.create(test); return null; } ....
voici le code du create :
et voici mon entity Test :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public void create(Test test) { em.persist(test); }Je m'y prend mal?Une idée?
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 @Entity @Table(name = "TEST") @NamedQueries({@NamedQuery(name = "Test.findAll", query = "SELECT t FROM Test t"), @NamedQuery(name = "Test.findByCle", query = "SELECT t FROM Test t WHERE t.cle = :cle"), @NamedQuery(name = "Test.findByCorps", query = "SELECT t FROM Test t WHERE t.corps = :corps")}) public class Test implements Serializable { private static final long serialVersionUID = 1L; @Id @Basic(optional = false) @Column(name = "CLE") private Integer cle; @Basic(optional = false) @Column(name = "CORPS") private String corps; public Test() { } public Test(Integer cle) { this.cle = cle; } public Test(Integer cle, String corps) { this.cle = cle; this.corps = corps; } public int getCle() { return cle; } public void setCle(Integer cle) { this.cle = cle; } public String getCorps() { return corps; } public void setCorps(String corps) { this.corps = corps; } @Override public int hashCode() { int hash = 0; hash += (cle != null ? cle.hashCode() : 0); return hash; } @Override public boolean equals(Object object) { // TODO: Warning - this method won't work in the case the id fields are not set if (!(object instanceof Test)) { return false; } Test other = (Test) object; if ((this.cle == null && other.cle != null) || (this.cle != null && !this.cle.equals(other.cle))) { return false; } return true; } @Override public String toString() { return "entities.Test[cle=" + cle + "]"; } }
J'ai pas mal cherché sur google mais je n'ai pas réussi à trouver de réponse. Ca fait un petit temps que je galère la-dessus et le temps disponible sur l'application commence à dangereusement diminuer. ...je stresse !
Merci d'avance.
Partager