Использование hasMany в grails и postgresql - PullRequest
0 голосов
/ 15 ноября 2010

У меня есть postgresql база данных с такой структурой столбцов:

Author
  id
  name

Book
  id
  name
  author_id

И классы доменов Groovy, которые представляют эти таблицы:

class Author {
   static hasMany = [ books : Book ]

   Integer id
   String name
}   

class Book {
   static belongsTo = Author

   Integer id
   Integer project_id
   String name
}

Моя главная цель - получить список книг из экземпляра автора.

author = Author.get( 1 ) // gets a author
author.books // must return a list of books. 

Но это не работает. Есть что-то явно очевидное, что я делаю не так?

note У меня большой опыт работы с Ruby / Rails и zull Java / Groovy.

1 Ответ

2 голосов
/ 15 ноября 2010

Измените свой Book класс на:

class Book {
   static belongsTo = [authors: Author]

   static mapping = {
       authors column: 'author_id'
   } 

   Integer id
   Integer project_id
   String name
}

Если вы не укажете mapping подобным образом, GORM по умолчанию создаст, соответственно, ожидают таблицу JOIN.

(Кстати, классы доменов автоматически предоставляются с «виртуальным» свойством id (типа Long, я думаю, переводя в bigint в PostgreSQL). Не нужно указывать его вручную, но оно также выиграло не навреди.)


РЕДАКТИРОВАТЬ : Обновлено в соответствии с комментариями спрашивающих:

Если книга может действительно иметь только одного автора, вы должны указать в Book классе:

Author author
static belongsTo = [author: Author]

static mapping = { author column: 'author_id' } 

Документацию GORM по отношениям один-ко-многим можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...