0

私は非常に単純な条件クエリの問題に悩まされています:

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の2つのソリューションは、あまり効果的ではないと思います:

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 でこれを実装する方法について説明します。

または、DB に新しいテーブルが必要ですか?

4

1 に答える 1

0

Criteria では同じ関連付けに 2 回参加できないため、HQL でこれを修正します。

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

于 2010-09-21T10:32:46.337 に答える