一尘不染

Hibernate多对多:查找包含B类的所有A类的条件

hibernate

我有2个班级,他们之间有很多关系。我以“问题”和“标签”为例,以使情况更易于理解。

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

我想做的是,如果问题包含一个标签为“hibernate”,则获取所有问题(及其相应的标签)。

我最多可以使用多对多表中的SQLQuery并返回问题ID的列表。然后使用带有限制条件的条件并抓住所有问题。但这太笨拙了,我敢打赌,有更好的方法可以做到吗?


阅读 231

收藏
2020-06-20

共1个答案

一尘不染

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

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

我假设在这种情况下,您实际上没有代表“桥接”表到标签表的类,否则您需要创建2个别名,例如:

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

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

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

2020-06-20