如何在一个查询MTM中查询所有拥有的对象?

时间:2017-09-16 06:13:57

标签: postgresql grails gorm

我列出了多对多关系的拥有方。如何使用Grails GORM查询一个查询中的所有拥有对象?在SQL中,我将使用连接表和拥有的表以及拥有表的id与in子句。

示例域类:

class Book {
  static belongsTo = Author
  static hasMany = [authors:Author]
  String title
}

class Author {
  static hasMany = [books:Book]
  String name
}

所以我有一个列表或一组作者,我想在一个查询中找到他们所有的书。

select b.*
  from book b
  join author_book ab on b.id = ab.book_id
 where ab.author_id in (1, 2, 3);

在Grails中,我尝试了以下但是失败了。

def books = Book.withCriteria {
  inList('authors', authors)
}

2 个答案:

答案 0 :(得分:0)

这是你正在寻找的吗?

Book.findAllByAuthorInList(authors)

答案 1 :(得分:0)

您需要先加入作者:

def books = Book.withCriteria {
    authors {
        inList('id', authors*.id)
    }
}