hay*_*uhl 5 indexing grails grails-orm composite-primary-key
我有三个域类:Beer,Review和Reviewer.
我希望Review表在Beer和Reviewer之间创建多对多关系,因此我希望Review的主键是Beer和Reviewer的id字段的组合.我正在关注这个Grails文档.
这是我的域类.
class Beer {
    String name
    String type
    Brewery breweryId
    static hasMany = [ reviews : Review ]
    static constraints = {
    }
}
class Reviewer {
    String screenName
    static hasMany = [ reviews : Review ]
    static constraints = {
    }
}
class Review implements Serializable {
    int score
    Beer beer
    Reviewer reviewer
    static constraints = {
    }
    static mapping = {
        id composite:['beer', 'reviewer']
    }
}
我得到了编译错误,但是stackoverflow上的另一个答案说我需要添加implements Serializable.这样可以解决错误,但是当我查看数据库时,我仍然没有得到复合主键.
以下是我在查看表定义时所看到的内容.我正在使用Postgres.
       Table "public.review"
   Column    |  Type   | Modifiers 
-------------+---------+-----------
 id          | bigint  | not null
 version     | bigint  | not null
 beer_id     | bigint  | not null
 reviewer_id | bigint  | not null
 score       | integer | not null
Indexes:
    "review_pkey" PRIMARY KEY, btree (id)
Foreign-key constraints:
    "fkc84ef75823f39326" FOREIGN KEY (beer_id) REFERENCES beer(id)
    "fkc84ef7587c483106" FOREIGN KEY (reviewer_id) REFERENCES reviewer(id)
我只对具有唯一约束的复合索引感到满意,但我也无法弄清楚如何做到这一点.我已经能够创建一个非唯一的复合索引,但这有两个问题.一,它不是唯一的.二,列在索引中按字母顺序指定(beer_id,reviewer_id).我想指定索引中列的顺序.
试试这个,在您的域中查看域类:
static constraints = {
     review(unique: ['beer','reviewer'])
}
您可能需要删除该表并让 Gorm 重新创建它。
上述限制意味着评论必须包含啤酒/评论者组合的唯一记录。它仍然是多对多的,评论者有多种啤酒,反之亦然,但评论是独一无二的。
| 归档时间: | 
 | 
| 查看次数: | 13865 次 | 
| 最近记录: |