BitArts Blog

ロードバイク通勤のRubyプログラマで伊豆ダイバー。の個人的なブログ。

Hibernate:多対多に対する問い合わせ

メモメモ。UserとGroupがmany-to-manyの関係で、Set User#getGroups()を介して指定のGroupに繋がっているUser達を取得したい場合のHQLクエリーの書き方。

select user from User as user join user.groups groups
where groups.name = 'group1'

joinしないといけないのか。where句だけで簡単に取れないのかなあ。

8/13追記)同じことをCriteriaでやる方法。

Criteria crit = session.createCriteria(User.class);
crit.createAlias("groups", "g");
Criterion exp = Expression.eq("g.name", "group1");
crit.add(exp);
List result = crit.list();

この場合もCriterionだけでは表現できず、やっぱりCriteria#createAlias()でjoinしなきゃいかんのか。