访问旧数据库的域类在设置为另一个域类中的字段时会引发错误?

时间:2014-10-01 18:18:17

标签: grails

我正在尝试使用grails访问旧数据库,并且我能够成功地使用它。这是访问旧数据库的域类:

class Login {

   Long accountId
   String characterName

    // some other fields

    static mapping = {
       id name: "accountId"
       version false
    }
}

我想在另一个对象中使用Login类,如下所示:

class UserLogin {
User user
Login login

static constraints = {
}}

然而,当我运行我的应用程序时,我收到此错误:

 | Error 2014-10-02 02:02:57,624 [localhost-startStop-1] ERROR hbm2ddl.SchemaUpdate  - HHH000388: Unsuccessful: alter table user_login add constraint FK_tn46n0dpvxs543dgi3378wj1x foreign key (login_id) references login (account_id)
| Error 2014-10-02 02:02:57,625 [localhost-startStop-1] ERROR hbm2ddl.SchemaUpdate  - Can't create table 'kokoo.#sql-4e0_74' (errno: 150)

如何正确使用Login对象作为User的字段?我感觉这是因为映射。

1 个答案:

答案 0 :(得分:1)

映射是可以的,但是当你启动一个应用程序时,Grails正在尝试针对域类更新现有的数据库模式。由于您在多对一关系中使用了登录域,Grails会尝试在login表上为其创建外键,并且由于某种原因(例如外键已经存在)而失败。

对于旧数据库,建议通过为dataSource设置dbCreate = 'validate'来禁用自动架构更新,请参阅详细信息:http://grails.org/doc/latest/guide/conf.html#3.3%20The%20DataSource。您可以手动支持数据库架构一致性,也可以使用migration plugin