我有ER图。我尝试将其描述为grails域,但在启动项目后,只存在(创建)表的一部分。我无法找到我犯错的地方。
我使用MySQL数据库,启动后只有song_tag表创建
ERD http://imagizer.imageshack.com/img661/4805/ke6jBx.png
我的grails域名
class Song {
static hasMany = [audios: Audio, tags: Tag]
BigInteger id
String title
String chorus
Boolean chorusRepeat
Date created
Date updated
static constraints = {
tags joinTable:[name:'song_tag', key:'song_id']
}
}
class Tag {
static belongsTo = Song
static hasMany = [songs: Song]
BigInteger id
String name
static constraints = {
songs joinTable:[name: 'song_tag', key: 'tag_id']
}
}
class Couplet {
static belongsTo = Song
BigInteger id
String text
Song song
static constraints = {
}
}
class Audio {
static belongsTo = Song
BigInteger id
String audio
String type
Date created
Date updated
Song song
static constraints = {
}
}
控制台输出
2015-02-01 14:20:36,007 [localhost-startStop-1]错误 hbm2ddl.SchemaExport - HHH000389:不成功:创建表对联 (id decimal(19,2)not null auto_increment,version bigint not null, song_id decimal(19,2)not null,text varchar(255)not null,primary key(id))ENGINE = InnoDB错误| 2015-02-01 14:20:36,007 [localhost-startStop-1]错误hbm2ddl.SchemaExport - 列不正确 列'id'的说明符
谢谢
答案 0 :(得分:1)
有两件事需要改变
1)
static constraints = {
songs joinTable:[name: 'song_tag', key: 'tag_id']
}
它应该是映射闭包而不是约束闭包
static mapping = { songs joinTable:[name: 'song_tag', key: 'tag_id']}
2)只需从域中删除id字段,它将由Gorm自动创建。