Bonjour à tous,

J'ai un peu de mal avec une requête, n'étant pas des plus habitué au Criteria (que j'aimerai pourtant vraiment utilisé ici), et je viens donc chercher un peu d'aide.

Pour essayer de résumer simplement :

j'ai 3 table : A , B, C.
Mano-to-Many entre A et B
One-to-Many entre B et C.

Je veux remonter les éléments de A, qui ont un élément de B donc le MAX(C) est égale a un critère.

En HQL ça donnerai quelque chose comme ça (je simplifie la jointure) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
select A
from A, B, C
where 
A.b = B.a
AND
(select max(C.x) from C where C.b = B) = :param
La ou j'ai du mal avec les criteria, c'est pour faire référence a mon B dans ma sous requête ?

J'ai actuellement quelque chose comme ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
Criteria criteria = getSession().createCriteria(A.class);
criteria.createAlias("B", "B");
 
DetachedCriteria subQuery = DetachedCriteria.forClass(C.class);
subQuery.setProjection(Projections.max("x"));
//ce qui coince :
subQuery.add(Restrictions.eqProperty("b.id", "B.id"));
 
criteria.add(Subqueries.eq(monParam, subQuery));
return crtieria.list();
Comment faire ?

Merci