Hello,

J'ai un mapping avec une clé composée, dont certains éléments pointent vers d'autres tables.

Côté DAO, je souhaite requéter via Criteria, mais les jointures qui fonctionnent sur les mapping classique, sans clé composée, ne marchent plus ici ; la jointure ne se fait pas.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<class name="com.xxx.CimValue"
		table="TOTO"
		dynamic-update="true">
 
	<composite-id name="id" class="com.xxx.CimValuePK">
	    	<key-many-to-one name="cim" column="ID_CIM" class="com.xxx.Cim"/>
	    	<key-many-to-one name="refset" column="ID_SET" class="com.xxx.CommonSet"/>
	    	<key-many-to-one name="source" column="ID_SOURCE" class="com.xxx.RateSourceCmn"/>
	    	<key-property name="economicalDate" column="ECO_DATE" type="java.util.Date" />
	    	<key-property name="deletionDatetime" column="DELETION_DATETIME" type="java.util.Date"/>
        </composite-id>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
Criteria criteria = getSession().createCriteria(CimValue.class)
				.createAlias("id.refset", "refset", Criteria.INNER_JOIN)
				.add(Restrictions.eq("id.economicalDate",ecoDate))
				.add(Restrictions.eq("refset.id", refset))
				;
			List<CimValue> result = criteria.list();
			return result;
Le problème intervient à l'exécution où j'obtiens une exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
ORA-00904: "REFSET1_"."ID": invalid identifier
L'origine étant la requête générée par hibernate, qui n'a pas fait de jointure avec la table de l'object REFSET :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
select this_.ID_CIM as ID1_18_0_, 
this_.ID_SET as ID2_18_0_, 
this_.ECO_DATE as ECO4_18_0_, 
this_.DELETION_DATETIME as DELETION5_18_0_, 
this_.ID_CHARAC as ID6_18_0_, 
[...] 
from TOTO this_ 
where refset1_.ID=? 
and this_.ECO_DATE=?
J'ai testé, retesté, re-vérifié, rien n'y fait. Est-ce que quelqu'un voit le problème et surtout sa raison ?