当前位置: 首页 > 面试题库 >

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

梁新觉
2023-03-14
问题内容

我有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



 类似资料:
  • 我有一个班级评语: 保留comment类可以工作,但以下条件查询是有效的: 抛出org.hibernate.exception.DataException:未为参数%1指定值。 这是生成的查询: 选择this_.comment_id作为comment1_0_0_,this_.comment_id作为comment0_0_,commenttop2_.comment_id作为comment1_0_2_

  • 问题内容: 考虑以下两个关系: 连接表ATag没有相应的实体类。现在,我想获取所有名为Tag1的Tag的Foo实例,是否可以仅使用Criteria? 子查询可能会有所帮助,但是,我无法为不存在的类ATag.class创建DetachedCriteria。 问题答案: 只是处理这个确切的问题。您在表中而不是对象中思考。只是参考,让Hibernate负责其余的工作: 如果您看到SQL Hibernat

  • 我使用的是android(SQL)中的Room database,我有一个表,它将日期作为一列存储为2000-01-31格式的字符串。我想获得表中的所有条目,根据它们各自的月份。我想用 但这样,我将不得不为每个月编写单独的查询。我想获得的条目按月,并显示在我的android应用程序。

  • 问题内容: 我有两张桌子。表和表。两者都有多对多的关系。 表A: 表B: 表AB: 我想要得到的名单,从表S =该有关系 的名单表第。 上表中的示例: 我想所有这些都表的关系小号 1和2,我得到那么3具有这两个表第。 如何使用SQL查询做到这一点? 问题答案: 如果要基于“不作为”列表(而不是“全部”作为)进行选择,请按照以下步骤操作: 用您的列表替换,并在having子句中替换为列表项的数量。

  • 和我的Gradle构建文件: 如何删除警告?

  • 我正在编写一些Selenium测试,我需要能够找到我已经找到的的祖先。 这是我正在尝试的,但没有任何结果 下面的图像显示了我选择的div,突出显示为深蓝色,并且显示了我想用箭头指向它的div。