我有2个班级,他们之间有很多关系。我以“问题”和“标签”为例,以使情况更易于理解。
对于每个问题,您都有几个标签。与标签相同。
我想做的是,如果问题包含一个标签为“hibernate”,则获取所有问题(及其相应的标签)。
我最多可以使用多对多表中的SQLQuery并返回问题ID的列表。然后使用带有限制条件的条件并抓住所有问题。但这太笨拙了,我敢打赌,有更好的方法可以做到吗?
本质上,您需要创建一个别名并使用该别名来查询子集合,如下所示:
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