【发布时间】:2010-10-27 10:55:36
【问题描述】:
我有 2 个具有多对多关系的类。我以“问题”和“标签”为例,让案例更容易理解。
对于每个问题,您都有多个标签。与标签相同。
如果问题包含标签为“休眠”,我想做的是获取所有问题(及其相应的标签)。
我最多可以在多对多表中使用 SQLQuery 并返回问题 ID 列表。然后使用带有restrictions.in 的标准并抓住所有问题。但这太笨拙了,我敢打赌有更好的方法,是吗?
【问题讨论】:
标签: hibernate
我有 2 个具有多对多关系的类。我以“问题”和“标签”为例,让案例更容易理解。
对于每个问题,您都有多个标签。与标签相同。
如果问题包含标签为“休眠”,我想做的是获取所有问题(及其相应的标签)。
我最多可以在多对多表中使用 SQLQuery 并返回问题 ID 列表。然后使用带有restrictions.in 的标准并抓住所有问题。但这太笨拙了,我敢打赌有更好的方法,是吗?
【问题讨论】:
标签: hibernate
本质上,您需要创建一个别名并使用该别名来查询子集合,如下所示:
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();
您可以从文档中了解更多信息:
【讨论】: