我有两个有很多关系的课程。我以“问题”和“标签”为例,使案例更容易理解。
对于每个问题,您都有几个标签。与标签相同。
如果问题包含标签“hibernate”,我想要做的就是获取所有问题(及其相应的标签)。
我最多可以在多对多表中使用SQLQuery并返回问题ID列表。然后使用带有limits.in的条件并抓住所有问题。但它太笨拙而且我打赌有更好的办法,是吗?
答案 0 :(得分:23)
基本上,您需要创建一个别名并使用别名来查询子集合,如下所示:
List questions = sess.createCriteria(Question.class)
.createAlias("Tags", "t")
.add( Restrictions.eq("t.name", "hibernate") )
.list();
我假设你实际上没有一个类代表这个场景中tags表的“bridge”表,否则你需要创建2个别名,例如:
List questions = sess.createCriteria(Question.class)
.createAlias("QuestionTag", "qt")
.createAlias("qt.Tags", "t")
.add( Restrictions.eq("t.name", "hibernate") )
.list();
您可以从文档中找到更多信息: