Grails 格雷斯,戈姆。按父查找子对象和按子对象查找父对象

Grails 格雷斯,戈姆。按父查找子对象和按子对象查找父对象,grails,gorm,Grails,Gorm,例如,我有一个父类作者: class Author { String name static hasMany = [ fiction: Book, nonFiction: Book ] } 还有一本儿童读物: class Book { String title static belongsTo = [author: Author] } 我已经使用以下方法编写了一些记录: def fictBook =

例如,我有一个父类作者:

class Author {    
    String name
    static hasMany = [
         fiction: Book, 
         nonFiction: Book
    ]
}
还有一本儿童读物:

class Book {    
    String title
    static belongsTo = [author: Author]
}
我已经使用以下方法编写了一些记录:

def fictBook = new Book(title: "IT")
def nonFictBook = new Book(title: "On Writing: A Memoir of the Craft")
def a = new Author(name: "Stephen King")
             .addToFiction(fictBook)
             .addToNonFiction(nonFictBook)
             .save()

我怎样才能按父类查找子类记录,按子类查找父类记录?

在我看来,这不是建模数据的最佳方法。我会这样做

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

class Book {
  String title
  BookTypes bookType
  static belongsTo = [author: Author]
}

enum BookTypes {
  FICTION,
  NON_FICTION
}
然后,您可以像这样进行查找

def author = Author.get(1)
def nonFictionByAuthor = Book.findAllByAuthorAndBookType(author, BookTypes.NON_FICTION)
你也可以这样做

def author = Author.get(1)
def fictionBooks = author.books.findAll { it.bookType == BookTypes.FICTION }
然后反过来说:

def fictionBook = Book.findByTitleAndBookType('Title001', BookTypes.FICTION) 

在我看来,这不是为数据建模的最佳方式。我会这样做

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

class Book {
  String title
  BookTypes bookType
  static belongsTo = [author: Author]
}

enum BookTypes {
  FICTION,
  NON_FICTION
}
然后,您可以像这样进行查找

def author = Author.get(1)
def nonFictionByAuthor = Book.findAllByAuthorAndBookType(author, BookTypes.NON_FICTION)
你也可以这样做

def author = Author.get(1)
def fictionBooks = author.books.findAll { it.bookType == BookTypes.FICTION }
然后反过来说:

def fictionBook = Book.findByTitleAndBookType('Title001', BookTypes.FICTION)