IllegalArgumentException: argument type mismatch
Salut !
J'ai un petit soucis de type pour une variable d'une de mes tables apparement, voici l'erreur que tomcat me crache :
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 69 70 71 72 73
|
javax.servlet.ServletException: org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of hibernateTables.Domaines.enti_codeId
org.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:520)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:427)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
cause mère
org.hibernate.PropertyAccessException: IllegalArgumentException occurred while calling setter of hibernateTables.Domaines.enti_codeId
org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:104)
org.hibernate.tuple.component.AbstractComponentTuplizer.setPropertyValues(AbstractComponentTuplizer.java:81)
org.hibernate.tuple.component.PojoComponentTuplizer.setPropertyValues(PojoComponentTuplizer.java:95)
org.hibernate.type.ComponentType.setPropertyValues(ComponentType.java:358)
org.hibernate.type.ComponentType.resolve(ComponentType.java:586)
org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
org.hibernate.loader.Loader.doQuery(Loader.java:701)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.doList(Loader.java:2220)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
org.hibernate.loader.Loader.list(Loader.java:2099)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
formAction.FormulaireConnection.execute(FormulaireConnection.java:81)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
cause mère
java.lang.IllegalArgumentException: argument type mismatch
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.hibernate.property.BasicPropertyAccessor$BasicSetter.set(BasicPropertyAccessor.java:42)
org.hibernate.tuple.component.AbstractComponentTuplizer.setPropertyValues(AbstractComponentTuplizer.java:81)
org.hibernate.tuple.component.PojoComponentTuplizer.setPropertyValues(PojoComponentTuplizer.java:95)
org.hibernate.type.ComponentType.setPropertyValues(ComponentType.java:358)
org.hibernate.type.ComponentType.resolve(ComponentType.java:586)
org.hibernate.type.ComponentType.nullSafeGet(ComponentType.java:275)
org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:1097)
org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:565)
org.hibernate.loader.Loader.doQuery(Loader.java:701)
org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:236)
org.hibernate.loader.Loader.doList(Loader.java:2220)
org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2104)
org.hibernate.loader.Loader.list(Loader.java:2099)
org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:378)
org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:338)
org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:172)
org.hibernate.impl.SessionImpl.list(SessionImpl.java:1121)
org.hibernate.impl.QueryImpl.list(QueryImpl.java:79)
formAction.FormulaireConnection.execute(FormulaireConnection.java:81)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:425)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:228)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:462)
javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) |
Et les sources concernées :
Domaines.hbm.xml :
Code:
1 2 3 4 5 6 7 8 9 10 11 12
|
<hibernate-mapping>
<class name="hibernateTables.Domaines" table="TB_DOMAINES">
<composite-id>
<key-property name="codeId" type="integer" column="DOM_CODEID" />
<key-many-to-one name="enti_codeId" class="hibernateTables.Entites" >
<column name="ENTI_CODEID" />
</key-many-to-one>
</composite-id>
<property name="nom" column="DOM_NOM" />
</class>
</hibernate-mapping> |
Domaines.java :
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
|
package hibernateTables;
import java.io.Serializable;
public class Domaines implements Serializable {
// Déclaration des variables en relation avec la bdd
private int codeId;
private String nom;
private int enti_codeId;
public Domaines() {
}
public int getCodeId() {
return codeId;
}
public void setCodeId(int codeId) {
this.codeId = codeId;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public int getEnti_codeId() {
return enti_codeId;
}
public void setEnti_codeId(int enti_codeId) {
this.enti_codeId = enti_codeId;
}
} |
Dans ma BDD :
Code:
1 2 3 4 5
|
CREATE TABLE TB_DOMAINES (
DOM_CODEID NUMBER DEFAULT 0 NOT NULL,
DOM_NOM VARCHAR2 (50) NOT NULL,
ENTI_CODEID NUMBER DEFAULT 0 NOT NULL, |
La requête que j'essaye de faire passer :
Code:
1 2
|
query = connectionBDD.createQuery("FROM Domaines as domaines WHERE domaines.enti_codeId='" + entite[i].getCodeId() + "'"); |
En gros j'ai 2 tables,
- une table Entites (Enti_codeId, Enti_nom, Enti_label)
- une table Domaines (Dom_codeId, Dom_nom, #Enti_codeId)
La relation entre les 2 c'est juste qu'un domaine appartient à une entité.
D'après le log, le problème viendrait d'une différence de type entre "domaines.enti_codeId" et "entite[i].getCodeId()" (dans la requête).
Le truc, c'est que je ne vois pas pourquoi ce ne sont pas les mêmes, ils sont définis en int et en number dans la BDD Oracle (ce qui correspond bien à int).
Faut ptet que je rajoute dans le fichier de mapping de Domaines, un champs type dans le <key-many-to-one> ?
Si vous pouviez m'éclairer ;)
PS : aussi une autre petite question qui n'a pas trop de rapport avec ça, comment je mets un generate="increment" pour un champs d'un composite-id ?