代码之家  ›  专栏  ›  技术社区  ›  Michel

Hibernate简单条件查询求解问题

  •  0
  • Michel  · 技术社区  · 14 年前

    我遇到了一个非常简单的条件查询问题:

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

    这些结果给了我很好的信息,但我认为这不是正确的方法。我将如何在Hibernate中用criteriaapi实现它。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Michel    14 年前

    我用HQL解决了这个问题,因为用Criteria不可能两次加入同一个关联

    http://opensource.atlassian.com/projects/hibernate/browse/HHH-879