Bonjour à tous,
Je suis dans le cas de figure suivant :
- un utilisateur possède un ensemble de groupes de certificats ;
Code:
public interface Utilisateur
{
public Collection getCertificateGroups();
}
- chaque groupe possède lui-même un ensemble de certificats ;
Code:
public interface CertificateGroup
{
public Collection getCertificates();
}
- d'autre part, un manager gère un ensemble de certificats.
Code:
public interface Manager
{
public getManagedCertificates();
}
Le mapping est tout ce qu'il y a de plus banal.
Je recherche l'ensemble des utilisateurs sous la responsabilité d'un manager, c'est-à-dire les utilisateurs qui possèdent un certificat gèré par un manager connu.
Facile, me direz-vous :)
En effet, en HQL, cela s'écrit très bien :
Code:
SELECT utilisateur
FROM UtilisateurImpl utilisateur, ManagerImpl manager
JOIN utilisateur.certificateGroups groupe, groupe.certificates certificat, manager.managedCertificates certificatGere
WHERE certificat = certificatGere
AND mandataire.id = 42
Or, je dois restreindre la liste des utilisateurs selon leurs nom, prenom et email. C'est là que j'aimerais utiliser l'API Criteria. Malheureusement, je n'arrive pas à exprimer la condition "WHERE certificat = certificatGere" :(
J'aimerais si possible eviter les solutions :
- effectuer deux requetes successives (avec un "IN" par exemple) ;
- effectuer des requetes imbriquées ;
- filtrer applicativement la collection retournée (via un Predicate, par exemple) ;
L'un d'entre vous pourrait-il m'eclairer ?
Merci d'avance
Ticker