java - 非标准ManyToMany关系的HQL查询

标签 java hibernate jpa hql

我在作者图书之间有多对多关系。
表:作者
id |姓名

表:分配
* ID |作者 ID |书号*

表:
id |标题

但是我使用的不是标准的 ManyToMany 映射,我使用的是 next

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;
}  

获取作者姓名的所有书籍的查询是什么?另外,获取所有书籍名称的作者姓名的查询是什么?

最佳答案

您只有两个 OneToMany 关联。您只需要在查询中使用联接,如 Hibernate documentation over HQL 中所述。 .

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 ...

旁注:您不应该命名您的分配书籍作者集合:这非常令人困惑。将其命名为分配

关于java - 非标准ManyToMany关系的HQL查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10603110/

相关文章:

java - hibernate .jpa.criteria.BasicPathUsageException : Cannot join to attribute of basic type

java - WindowBuilder 中的多行文本标签?

java - Libgdx Box 不是用颜色绘制的,而是用纹理绘制的

java - 在已有的包含大量数据的表上创建 MySQL 索引

java - Quarkus、PanacheEntity 和保存列表或集

java - 从 hibernate 数据库获取数据需要太长时间

sql-server - SQLServer 和 Hibernate 基于架构的 Multi-Tenancy

java - JDBC 复制驱动程序总是在没有 Activity 缓存的情况下返回相同的数据

java - 如何在 Hibernate 4 上获取来自 select 语句的实体的一个字段?

java - 与条件协商的语法 where 子句