【问题标题】:customising GORM basic collections自定义 GORM 基本集合
【发布时间】:2012-11-01 14:15:09
【问题描述】:

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

class Person {
    static hasMany = [nicknames:String]
}

这会将昵称存储在单独的表中person_nicknames

---------------------------------------------
| person_id         |     nickname          |
---------------------------------------------
|   1               |      Fred             |
---------------------------------------------

默认情况下,两列都可以为空,并且不存在索引。我想进行以下更改

  • 使两列都不为空
  • (person_id, nickname) 上放置一个复合唯一索引

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

【问题讨论】:

  • 我找不到一种方法来做到这一点(没有创建一个 Nickname 域类并且 Person 有很多而不是 String)。这可能是用户列表的 Q?
  • @tim_yates 我在这个(相关)错误报告 jira.grails.org/browse/GRAILS-9542 的末尾偷偷提了一个关于这个的问题
  • @tim_yates 尽早投票!
  • 正如 Tim 所提到的,目前似乎没有其他方法可以使用单独的域类来解决这个问题:class Nickname { static belongsTo = [person: Person] String name static constraints = { name unique: 'person' } } 以防万一有人需要解决此问题。
  • @AndreSteingress 是的,但我使用这个功能正是因为我不想创建一个域类

标签: grails groovy grails-orm


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    http://grails.org/doc/2.4.3/ref/Database%20Mapping/joinTable.html

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

    http://grails.org/doc/2.4.3/ref/Database%20Mapping/column.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多