Grails 自定义GORM基本集合

Grails 自定义GORM基本集合,grails,groovy,gorm,Grails,Groovy,Gorm,除了不同域类之间的关联,GORM还支持基本集合类型的映射。例如,下面的类创建一个昵称关联,它是一组字符串实例 class Person { static hasMany = [nicknames:String] } 这将把昵称存储在一个单独的表中person\u昵称: --------------------------------------------- | person_id | nickname | ------------------

除了不同域类之间的关联,GORM还支持基本集合类型的映射。例如,下面的类创建一个昵称关联,它是一组字符串实例

class Person {
    static hasMany = [nicknames:String]
}
这将把昵称存储在一个单独的表中
person\u昵称

---------------------------------------------
| person_id         |     nickname          |
---------------------------------------------
|   1               |      Fred             |
---------------------------------------------
默认情况下,两个列都可以为空,并且不存在索引。我想做以下修改

  • 使两列都不为空
  • (个人id、昵称)

显然,我可以运行一个SQL脚本来进行这些更改,但我是否可以在域模型中表达这一点,以便GORM在创建和更新架构时执行此操作?

不,这目前是不可能的。您可以通过将昵称设置为显式域类(Andre Steingress在问题注释中给出了一个示例)来伪造它,但否则您必须编写迁移。

您可以使用joinTable和基本集合类型

可以使用列映射指定SQL行为:


我找不到一种方法来实现这一点(如果不给domain类取一个昵称,而让Person用许多昵称代替String)。这可能是用户列表的一个问题?@tim_-yates我在这个(相关的)错误报告的结尾偷偷地问了一个关于这个的问题@tim_-yates尽早而且经常投票!正如Tim提到的,目前似乎没有别的办法,只能用一个单独的域类来解决这个问题:类昵称{static belongsTo=[person:person]字符串名静态约束={name unique:'person'}以防有人需要解决此问题。@AndreSteingress是的,但我使用此功能正是因为我不想创建doman类