当前位置: 首页 > 知识库问答 >
问题:

根据ER-diagram创建grails域

严瑞
2023-03-14

我有急症室图。我试着像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)不为空,版本bigint不为空,song_id decimal(19,2)不为空,text varchar(255)不为空,主键(id))Engine=InnoDB错误2015-02-01 14:20:36,007[localhost-startStop-1]错误hbm2ddl.schemaexport-列“id”的列说明符不正确

谢谢你

共有1个答案

麻宜春
2023-03-14

有两件事必须改变

1)

 static constraints = {
    songs joinTable:[name: 'song_tag', key: 'tag_id']
}

它应该在映射闭包中,而不是在约束闭包中

static mapping = {  songs joinTable:[name: 'song_tag', key: 'tag_id']}

2)只需从域中删除id字段,GORM就会自动创建id字段。

 类似资料:
  • 问题内容: 我正在尝试根据创建记录的日期为每个记录创建唯一的ID。例如,如果今天创建记录,我希望键为20101130XX,其中XX是数字的顺序列表,例如01、02、03等…以防今天有多个人创建记录。 如果昨天有3个人创建了记录,则其唯一ID为 2011032700 2011032701 2011032702 然后午夜到了,有人创建了一个新记录 2011032800 这样做的目的是给每个记录一个唯一

  • Class类提供很多方法用于获取类的各种信息,比如获取类名、判断该类是否是一个接口还是普通类等等。在Java中枚举类是一种类,而注解是一个接口,数组也是一个类;Java原始类型(boolean, byte, char, short, int, long, float, and double)和关键字void也被表示为Class的对象。

  • 找到了以下场景的部分答案,但需要进一步澄清。 有下列情况: 用java编写的域类 我想做的事情: 创建一个grails应用程序,它可以执行以下操作: 使用java域类作为grails域类 通过GORM将java域类映射到DB 能够从groovy域类创建java域类,以便能够将其发送到java服务器进行处理,然后接收java类响应并将其转换为groovy类,以便使用GORM存储在DB中映射 基本上有

  • 问题内容: Oracle是否具有内置功能来根据其各个组成部分(年,月和日)创建仅对缺失数据返回null的日期? 我知道,但是我需要首先编写一个字符串,并且运算符和函数都无法轻松处理丢失的数据: 只要是我们最终和: 问题答案: 例如,您可以使用: 不幸的是,Oracle没有一种方法(如果可能)进行转换,否则将返回NULL。SQL Server最近为此目的而引入。 一种选择是为失败的转换编写带有异常处

  • 根据给定的键值对创建一个对象。 使用 Array.reduce() 来创建和组合键值对。 const objectFromPairs = arr => arr.reduce((a, v) => ((a[v[0]] = v[1]), a), {}); objectFromPairs([['a', 1], ['b', 2]]); // {a: 1, b: 2}

  • 问题内容: 对于我的应用程序,我需要在运行时进行动态数据库连接。我知道,有多种方法可以创建多个数据源,但我认为它们并不是那么动态。设想: 用户可以输入数据库凭据并连接到远程数据库,以将单个行和表导入另一个数据库。为此,我需要动态连接到远程数据库。 我试图在服务中做到这一点,就像他们在“如果在grails中使用groovy sql类”中 所说的那样,它是否使用grails连接池? 注意:在这种情况下