Stefan
Stefan

Reputation: 9599

Using hasMany in grails and postgresql

I have a postgresql database that has this column structure:

Author
  id
  name

Book
  id
  name
  author_id

And Groovy Domain Classes that repressent those tables:

class Author {
   static hasMany = [ books : Book ]

   Integer id
   String name
}   

class Book {
   static belongsTo = Author

   Integer id
   Integer project_id
   String name
}

My main goal to get a list of books from a author instance.

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

But this does not work. Is there something glaringly obvious I'm doing wrong?

note I've got lots of Ruby/Rails experience and zull Java/Groovy experience.

Upvotes: 0

Views: 1845

Answers (1)

robbbert
robbbert

Reputation: 2193

Change your Book class to:

class Book {
   static belongsTo = [authors: Author]

   static mapping = {
       authors column: 'author_id'
   } 

   Integer id
   Integer project_id
   String name
}

If you don't specify the mapping like that, GORM will create, resp., expect, a JOIN table by default.

(BTW, domain classes are automatically provided with a "virtual" id property (of type Long I think, translating to bigint in PostgreSQL). It's not necessary to specify it manually, but it also won't harm.)


EDIT: Updated as per the questioners comments:

If a book can really have just one author, you'd state in the Book class:

Author author
static belongsTo = [author: Author]

static mapping = { author column: 'author_id' } 

The GORM documentation on one-to-many relations can be found here.

Upvotes: 2

Related Questions