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

休眠:选择集合中包含所有指定值的实体

华宏逸
2023-03-14
问题内容

我需要一个棘手的hibernate查询问题的帮助。我有以下实体:

public class Book {
   private String bookId;
   private String author;
   private String isbn;
   private Set<Tag> tags;
   // getters, setters etc.
}

public class Tag  {
   private String tagId;
   private String tagName;
  // getters, setters, etc.
}

两者之间存在多对多关联,这由联接表books_tags_mn和book_id和tag_id列表示。

我喜欢做的事情是:我要创建一个Hibernate查询/标准查询,返回所有的书,有 所有的 一组特定的标签。什么工作是选择具有所有书籍 的任何
一组的标签。

我一直在使用标准API,但并没有真正理解它。所以我想做的事(使用伪HQL)

from Book book where book.tags containsAll(:tags)

在此方面的任何帮助将不胜感激,因此,非常感谢您。


问题答案:

您可以使用以下查询:

select book from Book book
where :numberOfTags = (select count(tag.id) from Book book2
                       inner join book2.tags tag
                       where book2.id = book.id
                       and tag in (:tags))

这里numberOfTags是标签在组标签必须匹配的数量。



 类似资料:
  • 问题内容: 在SQL Server 2005中,我有一个包含订单ID和产品ID的订单详细信息表。我想编写一条sql语句,查找具有特定订单内所有项目的所有订单。因此,如果订单5包含项1、2和3,则我希望所有其他订单也具有1、2和3。此外,如果订单5具有2次两次和3次一次,则我希望所有其他订单具有两个2和一个3。 我的偏爱是它返回完全匹配的订单,但是,如果这样更容易执行/性能更好,则可以接受超集订单。

  • 问题内容: 在具有两种类型的实体(父级和子级)的场景中: 父母-@OneToMany Collection孩子; 默认设置是对子级集合进行延迟加载。这种模式对少数儿童非常有效,但是如果这个数字很大,这似乎是不可持续的。因此,在某些情况下,我认为孩子的数量会很大,因此我使用了分页的服务方法(例如“ getChildren(父父母,int偏移量,int计数)”)。 问题是:这是处理此类情况的最佳方法吗

  • 问题内容: 在休眠状态下,我可以执行以下操作 现在,如果我想获取int和String怎么办? 现在列表的结构是什么? 问题答案: 这可以。您唯一需要了解的是它将返回如下列表:

  • 我有一个实体,其中一个字段是 我需要得到所有的时间表项目,其中的集合包含一个特定的组(集合可以有很多不同的组也。如果“我的组”是其中之一-它是我需要的)。 如果在没有任何条件的情况下运行代码,我可以在调试器中看到我的包含数据库中的所有项,并且每个项都包含中的组。 截图 当然,我可以“手动”找到我需要的项(例如,使用.stream()),但我肯定有一些方法可以使用谓词来获得它。

  • 问题内容: 我正在尝试做这样的事情,但使用代替: 用户是与联接表UserDomain 有关系的实体。这里的重点只是找到链接到具有id =“ XXX”的用户。 似乎应该很简单…但是到目前为止我还没有运气找到任何有用的文档。 问题答案: 我终于找到了。事实证明,这毕竟并不难……一旦您知道! 是的,有人盯着我看Javadoc:http : //www.dil.univ- mrs.fr/~massat/d

  • 问题内容: 我试图找出是否可以使用Hibernate Criteria API进行以下HQL: 其中InitialCount是一个非常简单的,具有字符串和长构造函数的bean: 可能吗? 问题答案: 试试这个 : 其中,公式属性是映射到公式“ substring(name,1,1)”的人员的属性