-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: Query by example
PostPosted: Thu Jun 02, 2005 5:13 am 
Newbie

Joined: Thu Jun 02, 2005 4:30 am
Posts: 5
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


Top
 Profile  
 
 Post subject:
PostPosted: Thu Jun 02, 2005 7:21 am 
Newbie

Joined: Wed Jun 01, 2005 11:33 am
Posts: 5
J'ai rencontré exactement la meme chose, et j'ai pris la meme solution que toi :)

Je suis aussi preneur si quelqu'un sait comment faire des AND au lieu d'un OR !


Top
 Profile  
 
 Post subject:
PostPosted: Fri Jun 03, 2005 9:27 am 
Hibernate Team
Hibernate Team

Joined: Sun Sep 14, 2003 3:54 am
Posts: 7256
Location: Paris, France
Ce ne sont pas des ou qui sont faits.
if ( buf.length()>1 && critCondition.trim().length()>0 ) buf.append(" and ");

_________________
Emmanuel


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.