关于groovy:在grails和postgresql中使用hasMany

Using hasMany in grails and postgresql

我有一个具有此列结构的 postgresql 数据库:

1
2
3
4
5
6
7
8
Author
  id
  name

Book
  id
  name
  author_id

以及代表这些表的 Groovy 域类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Author {
   static hasMany = [ books : Book ]

   Integer id
   String name
}  

class Book {
   static belongsTo = Author

   Integer id
   Integer project_id
   String name
}

我的主要目标是从作者实例中获取书籍列表。

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

但这不起作用。有什么明显的我做错了吗?

注意我有很多 Ruby/Rails 经验和 zull Java/Groovy 经验。


将您的 Book 类更改为:

1
2
3
4
5
6
7
8
9
10
11
class Book {
   static belongsTo = [authors: Author]

   static mapping = {
       authors column: 'author_id'
   }

   Integer id
   Integer project_id
   String name
}

如果你没有像那样指定 mapping,GORM 将默认创建,或者期望,一个 JOIN 表。

(顺便说一句,域类自动提供了一个 "virtual" id 属性(我认为是 Long 类型,在 PostgreSQL 中转换为 bigint)。没有必要手动指定它,但它也不会造成伤害。)

编辑:根据提问者评论更新:

如果一本书真的只有一个作者,你会在 Book 类中声明:

1
2
3
4
Author author
static belongsTo = [author: Author]

static mapping = { author column: 'author_id' }

可以在此处找到有关一对多关系的 GORM 文档。