2010-09-18 2 views
0

я застрял с очень простой проблемой критерии запроса:Hibernate простые критерии запроса решения проблемы

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(); 

, конечно, это не приводит не пользователя.

в SQL я также попробовал:

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')) 

также не пользователь, конечно

два решения в SQL, не очень эффективно, я думаю:

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 

другое:

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') 

эти r мне кажется, что это хорошая информация, но я не думаю, что это правильный путь. И как я собираюсь реализовать это в Hibernate с помощью API критериев.

Или мне нужен новый стол в моей БД?

ответ

Смежные вопросы