2015-04-17 4 views
1

Например, у меня есть родительский класс Автор:Grails, gorm. Найти ребенок от родителей и родителей на ребенке

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() 

Как я могу найти запись дочернего класса по родительской и родительской записи по ребенку?

ответ

4

На мой взгляд, это не лучший способ моделирования ваших данных. Я бы сделал это так.

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

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

enum BookTypes { 
    FICTION, 
    NON_FICTION 
} 

Затем вы можете сделать Lookups как

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) 
Смежные вопросы