2010-09-18 6 views
0

je suis coincé avec un problème très simple critères de recherche:résolution de problèmes requête Hibernate critères simples

sess .createCriteria(user.class, "user") 
     .user_c.add(Restrictions.eq("user.status", 1)) 
     .user_c.createAlias("user.userCategories","ucs") 
     .add(Restrictions.eq("ucs.category_id",1)); 
     .add(Restrictions.eq("ucs.category_id",'yes')); 
     .add(Restrictions.eq("ucs.category_id",2)); 
     .add(Restrictions.eq("ucs.category_id",'no')).list(); 

Bien sûr, cela se traduit pas utilisateur.

dans SQL J'ai aussi essayé il:

Select * FROM users user , ec_user_category uc where 
    uc.user_login = user.login AND 
    uc.status = 1 AND 
    ((uc.category_id = 1 AND uc.value = 'yes') AND (uc.category_id = 2 AND uc.value = 'no')) 

également aucun utilisateur bien sûr

deux solutions dans SQL, je pense pas très efficace:

Select a.login from 
     (Select user.login , COUNT(*) as counter FROM users user , ec_user_category uc 
     where user.status = 1 
     and uc.user_login = user.login 
     and 
      ((uc.category_id = 1 and uc.value = 'yes') 

      OR (uc.category_id = 2 and uc.value = 'no')) 

     GROUP BY user.login) a where a.counter = 2 

autre:

Select * FROM users u 
    JOIN user_category uc on uc.user_login = u.login 
    JOIN user_category uc2 on uc2.user_login = u.login 
WHERE (uc.category_id = 1 and uc.value = 'yes') 
     AND (uc2.category_id = 2 and uc2.value = 'no') 

ces r Les estimations me donnent la bonne information, mais je ne pense pas que ce soit la bonne façon. Et comment je vais implémenter cela dans Hibernate avec l'API Criteria.

Ou ai-je besoin d'une nouvelle table dans ma base de données?

Répondre