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 : 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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : 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
 
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 ?