Hibernateの簡単な基準クエリ解決問題
-
04-10-2019 - |
質問
私は非常に単純な基準クエリの問題に固執しています:
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')
これらの結果は私に良い情報を与えてくれますが、これが正しい方法ではないと思います。そして、私がどのようにこれを冬眠して基準APIで実装するつもりですか。
または、DBの新しいテーブルが必要ですか?
解決
私はこれをHQLで修正します。基準では同じ関連付けに2回参加することは不可能ではないため
http://opensource.atlassian.com/projects/hibernate/browse/hhh-879
所属していません StackOverflow