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
| author = Author. get( 1 ) // gets a author
author. books // must return a list of books. |
但这不起作用。有什么明显的我做错了吗?
注意我有很多 Ruby/Rails 经验和 zull Java/Groovy 经验。
- 不相关,但您应该删除"Integer id"声明 - Grails 为您添加 id 和 version 属性。
将您的 Book 类更改为:
如果你没有像那样指定 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 文档。
- 我会试试这个,但是一本书有一个作者,一个作者可能有很多书....看起来你设置了 book.authors ?
-
另外,你能指点我提到的文件吗? (因为 grails.org 上的文档没有或至少......没有在表面上)
-
请参阅更新的答案。 - 以 create-drop 或 update 模式(在附加的、实验性的项目中)定义数据库以查看实际创建的数据库模式可能总是一个好主意。
-
robbbert - 如果您想查看当前域类的架构定义,只需运行"grails schema-export"并查看 target/ddl.sql