Hibernate多对多: Criteria for looking up all class A which contains class B

标签 hibernate

我有两个具有多对多关系的类(class)。我以“问题”和“标签”为例,以使案例更容易理解。

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

如果问题包含“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/en-US/html/querycriteria.html#querycriteria-associations

关于Hibernate多对多: Criteria for looking up all class A which contains class B,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4032434/

相关文章:

java - 从 JpaRepository 检索对象后,延迟加载在简单的 Hibernate/Spring 启动示例中不起作用

java - Querydsl - 线程 "main"java.lang.IllegalArgumentException : No sources given 中的异常

java - 事务隔离 READ UNCOMMITTED 不起作用

oracle - Hibernate - 按公式属性排序标准

java - spring中如何将事务设置在最底层,类似jdbc?

java - @SqlDelete 不适用于 hibernate 中的软删除

java - 如何将对象序列化到数据库以供 Hibernate 在 Java 中读取

java - EntityManager.merge() 不创建表记录

sql-server - 在grails 3.3.9中提供默认的辅助排序列

java - hibernate 应该为每个表使用唯一的序列吗?