【问题标题】:Table creation fails创建表失败
【发布时间】:2012-04-29 00:55:33
【问题描述】:

我正在使用 H2 数据库来测试我的 Grails 应用程序。我有一些简单的域类,例如:

package mypackage

class UserSession {
    User user
    String sessionTokenHash

    // last seen info
    String lastSeenIP
    Date lastSeenTime
    String lastSeenUserAgent
    String lastSeenURL
}

但是,表格似乎没有正确创建。

hbm2ddl.SchemaExport 不成功:创建表 user_session(id bigint not null auto_increment,version bigint not null,last_seenip varchar(255) not null,last_seen_time datetime not null,last_seenurl varchar(255) not null,last_seen_user_agent varchar(255) not null, session_token_hash varchar(255) not null, user_id bigint not null, 主键 (id)) ENGINE=InnoDB
hbm2ddl.SchemaExport SQL 语句中的语法错误“CREATE TABLE USER_SESSION (ID BIGINT NOT NULL AUTO_INCREMENT, VERSION BIGINT NOT NULL, LAST_SEENIP VARCHAR(255) NOT NULL, LAST_SEEN_TIME DATETIME NOT NULL, LAST_SEENURL VARCHAR(255) NOT NULL, LAST_SEEN_USER_AGENT VARCHAR(255) NOT NULL, SESSION_TOKEN_HASH VARCHAR(255) NOT NULL, USER_ID BIGINT NOT NULL, PRIMARY KEY (ID)) ENGINE=[*]INNODB ";预期的“标识符”; SQL 语句:
创建表 user_session(id bigint 不为空 auto_increment,版本 bigint 不为空,last_seenip varchar(255) 不为空,last_seen_time 日期时间不为空,last_seenurl varchar(255) 不为空,last_seen_user_agent varchar(255) 不为空,session_token_hash varchar(255) 不null,user_id bigint 不为 null,主键 (id)) ENGINE=InnoDB [42001-147]

设置为在create-drop 模式下使用临时内存H2 数据库。

【问题讨论】:

  • 不确定这是否是问题所在,但我尽量避免在我的域名中使用“常用”词,例如“用户”和“会话”,因为它们可能具有某种受保护的 grails 行为或甚至可能在 H2 中保留一些用途。

标签: grails grails-orm h2


【解决方案1】:

我使用了错误的方言;我的 DataSource.groovy 在 dataSource 块中设置了以下方言:

dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"

我为开发数据源添加了以下行:

dialect = "org.hibernate.dialect.H2Dialect"

这已经解决了问题。

【讨论】:

    猜你喜欢
    • 2013-09-14
    • 2014-05-22
    • 1970-01-01
    • 2018-07-22
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    相关资源
    最近更新 更多