2010-08-02 8 views
4

J'essaie d'utiliser Hibernate QBE (en fait, Spring HibernateTemplate.findByExample()) pour retourner une liste d'utilisateurs par leur nom d'utilisateur. J'utilise une valeur "connue" pour la recherche (le nom d'utilisateur "JOHN.SMITH" existe dans la base de données).HibernateTemplate findByExample ne renvoie aucun résultat

Malheureusement, je n'ai aucun résultat. Voici le test unitaire.

@Test 
public void testQueryByExample() { 

    User qbeUser = new User(); 
    qbeUser.setUsername("JOHN.SMITH"); 

    List<User> userList = userDao.queryByExample(qbeUser); 
    Assert.notNull(userList); 
    Assert.isTrue(userList.size() > 0, "List of returned users must not be 0"); 

} 

La méthode QueryByExample() est définie dans un générique DAO:

@SuppressWarnings("unchecked") 
public List<T> queryByExample(T obj) { 
    return getHibernateTemplate().findByExample(obj); 
} 

Y at-il sorte de configuration spéciale nécessaire pour QBE au travail?

+0

Je réponds à la demande de skaffman, en tournant la journalisation Hibernate SQL serait certainement utile. –

Répondre

7

C'était de la pure stupidité de ma part.

Les classes utilisées en tant qu'exemples contenaient des ints et des booléens (primitives). Puisque ces valeurs par défaut à 0 et false, les requêtes échouaient.

+5

La classe Hibernate 'Example', cependant, a des options de critères plus flexibles. Voir http://docs.jboss.org/hibernate/stable/core/reference/en/html/querycriteria.html#querycriteria-examples. –

+0

Commentaire incroyable. J'ai passé beaucoup de temps à chercher les bons docs et je n'ai pas pu les trouver. – ashes999

0

vous devez passer le fichier de configuration de ressort sinon comment obtiendriez-vous la connexion et les informations de mise en commun .. utiliser @ annotation pour charger le fichier de ressort au-dessus de la déclaration de classe.

+0

La classe Test est annotée avec @ContextConfiguration (locations = "classpath: applicationContext.xml") La classe testée est en cours d'injection. Mes autres méthodes qui n'utilisent pas QBE sont correctes, mais QBE ne fonctionne pas. Oui, 'findByExample()' inclut tous les attributs primitifs dans ses critères, mais ignore tous les attributs non primitifs dont la valeur est null. – Jason

+0

pour les critères d'interrogation, vous pouvez utiliser la méthode findByCriteria de hibernateTemplate .. – TaherT