Hibernate多对多:查找包含B类的所有A类的标准

Yau*_*ung 8 hibernate

我有两个有很多关系的课程.我以"问题"和"标签"为例,使案例更容易理解.

对于每个问题,您都有几个标签.与标签相同.

如果问题包含标签"hibernate",我想要做的就是获取所有问题(及其相应的标签).

我最多能与许多对多表的SQLQuery做到这一点并返回问题ID列表.然后使用带有limits.in的条件并抓住所有问题.但它太笨拙了我打赌有更好的办法,是吗?

lom*_*axx 23

实质上,您需要创建一个别名并使用别名来查询子集合,如下所示:

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

我假设你实际上没有一个类代表这个场景中的tags表的"桥"表,否则你需要创建2个别名,例如:

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

您可以从文档中找到更多信息:

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