【问题标题】:Hibernate simple criteria query solving problemHibernate简单条件查询解决问题
【发布时间】:2011-04-14 02:49:53
【问题描述】:

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

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

这些结果给了我很好的信息,但我认为这不是正确的方法。以及我将如何使用 Criteria API 在 Hibernate 中实现这一点。

或者我的数据库中需要一个新表吗?

【问题讨论】:

    标签: sql hibernate hibernate-criteria nhibernate-criteria


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-25
      • 2012-05-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多