[.ear][JPA]Impossible de peupler la base de données
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 :
Code:
1 2 3
|
Cause racine
java.lang.IllegalArgumentException: Object: entities.Test[cle=10] is not a known entity type. |
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.
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 :
Code:
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;
}
.... |
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.
voici le code du create :
Code:
1 2 3 4
|
public void create(Test test) {
em.persist(test);
} |
et voici mon entity Test :
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 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 + "]";
}
} |
Je m'y prend mal?Une idée?
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 ! :oops:
Merci d'avance.