当前位置: 首页 > 知识库问答 >
问题:

非标准多项关系的HQL查询

冉德元
2023-03-14
class Book
{
   @Id
   long id;

   String title;

   @OneToMany
   List<Assign> authors;
}

class Assign
{
   @Id
   long id;

   @ManyToOne
   Book book

   @ManyToOne
   Author author;
}

class Author
{
   @Id
   long id;

   String name;

   @OneToMany
   List<Assign> books;
}  

什么是查询以获取所有图书的作者姓名?还有什么是查询得到所有的书的名字为作者的名字?

共有1个答案

汤洋
2023-03-14

你只是有两个单一的联系。您只需要在查询中使用联接,如HQL上的Hibernate文档所述。

select book from Author author 
left join author.books assign
left join assign.book book
where author.name = :name

第二个查询是相同的,只是您只想要书名:

select book.name from Author author ...

附带说明:您不应该将您的分配集合命名为booksauthors:这非常令人困惑。将其命名为assigns

 类似资料:
  • 问题内容: 我在Java中有2个POJO类,Answer和Collaborator,具有多对多关系。 类有一套,但没有一套。我需要在Hibernate中进行的工作是找到合作者,以获得id给出的答案。 我已经使用结果转换器使用Hibernate ()进行了此操作,但是在使用时我陷入了困境,因为我没有要提供给联接的答案列表。 问题答案: 完成了,终于… 这是代码:

  • 我试图使用Hibernate标准来选择,使用多对多关系中相关的表。n-m表有一些附加列,而不仅仅是每个表的ID。 java.lang.IllegalArgumentException:无法在此ManagedType[User]上找到具有给定名称[UserRolesList.Role]的属性 我已经为这种情况尝试了许多选择,比如加入,但仍然无法使其工作。

  • Im存在内存不足的错误,并且通常使用Windows builder运行非常慢的eclipse并处理一些大型可视化类,所以经过一些研究后,我意识到增加堆java大小将会解决这个问题...它确实... 它给我的是“创建Java虚拟机失败” 为什么我不能这样做?它会帮助我处理和呈现视觉类的速度慢吗?

  • 我有Hibernate HQL查询,它似乎可以完美地完成它的工作,但我目前正在尝试使用Hibernate Criteria API,并希望使用Criteria API表达相同的HQL查询。在这个特定的示例中,我在HQL查询中有两个联接,其中我的第二个联接使用第一个联接的别名。我想实现与标准API相同的东西。这可能吗? 例如,我还尝试将第二个别名定义为: 但没有成功。

  • 问题内容: 我在Hibernate中具有以下一对一关系(可能为null): 我正在尝试使用HQL选择所有具有非空详细信息的实体: 但这会返回所有实体,无论详细信息是否为空。 那么正确的HQL是什么? 问题答案: 好的,我找到了解决方案:

  • 问题内容: 我正在使用Hibernate 3.1.1,尤其是我正在使用HQL查询。 根据文档,Hibernate的查询是多态的: 像:这样的查询不仅返回的实例,还返回像的子类的实例。 如何查询Cat的实例,但不查询其任何子类的实例? 我希望能够做到而不必明确提及每个子类。 我知道以下选项,但并不令人满意: 查询后手动过滤实例,或者: 在鉴别符列上手动添加WHERE子句。 Hibernate允许用户