开发者

Hibernate many-to-many: Criteria for looking up all class A which contains class B

I have 2 classes which have many to many relationship. I take the 'Question' and 'Tag' as an example to make the case more understandable.

开发者_如何学Go

For each question, you have several tags. The same as for tag.

What I would like to do is to get all questions (and their corresponding tags) if the question contain a tag says "hibernate".

I can at most do it with a SQLQuery in the many-to-many table and return a list of the question ID. Then use a criteria with a restrictions.in and grab all questions. But it's too clumsy and I bet there is a better way of doing it, is there?


Essentially, you need to create an alias and use the alias to query the child collection like so:

List questions = sess.createCriteria(Question.class)
    .createAlias("Tags", "t")
    .add( Restrictions.eq("t.name", "hibernate") )
    .list();

I'm assuming you don't actually have a class that represents the "bridge" table to the tags table in this scenario, otherwise you'd need to create 2 aliases eg:

List questions = sess.createCriteria(Question.class)
        .createAlias("QuestionTag", "qt")            
        .createAlias("qt.Tags", "t")
        .add( Restrictions.eq("t.name", "hibernate") )
        .list();

You can find out more from the docs:

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/querycriteria.html#querycriteria-associations

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜