Bonjour a tous,
Je commence par le forum français, mes excuses si ce topic a deja ete ouvert sur les autres forums (merci de me le signaler).
Je cherche a appliquer la technique 'Query By Example' de façon generique. D'apres ce que j'avais cru comprendre du bouquin de G. King (Hibernate in Action), si je veux trouver tous les objets
User dont les attributs correspondent à des valeurs que je connais, je peux utiliser une instance
utilisateur de
User :
Code:
Criteria requete = getSession().createCriteria(User.class);
Example exampleUser = Example.create(utilisateur);
return requete.add(exampleUser).list();
Je pensais que j'obtiendrais l'ensemble des
User dont les attributs correspondraient a toutes les valeurs de
utilisateur, c'est-a-dire l'equivalent de conditions AND ds la clause WHERE... Or il semble bien qu'il s'agisse au contraire de conditions OR : j'obtiens tous les User dont au moins un des attributs correspond a ce que je recherche.
L'un d'entre vous a-t-il ete confronté a ce besoin ? Existe-t-il une solution implementée par Hibernate ? Sinon, je livre a votre sagacité une proposition :
Code:
protected List get(Object objet, List fields) throws ManagerException
{
Session session;
Criteria requete;
Getter accesseur;
Class clazz = objet.getClass();
List laListe = new ArrayList();
try
{
session = HibernateSessionFactory.currentSession();
requete = session.createCriteria(clazz);
for (Iterator iter = fields.iterator(); iter.hasNext();)
{
String champ = (String) iter.next();
accesseur = ReflectHelper.getGetter(clazz, champ);
requete.add( Expression.eq(champ, accesseur.get(objet)) );
}
laListe = requete.list();
}
catch (HibernateException e)
{
e.printStackTrace();
throw new ManagerException(e);
}
finally
{
this.closeSession();
}
return laListe;
}
Comments are welcome :)
Ticker