我正在尝试使用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的字段?我感觉这是因为映射。
答案 0 :(得分:1)
映射是可以的,但是当你启动一个应用程序时,Grails正在尝试针对域类更新现有的数据库模式。由于您在多对一关系中使用了登录域,Grails会尝试在login
表上为其创建外键,并且由于某种原因(例如外键已经存在)而失败。
对于旧数据库,建议通过为dataSource设置dbCreate = 'validate'
来禁用自动架构更新,请参阅详细信息:http://grails.org/doc/latest/guide/conf.html#3.3%20The%20DataSource。您可以手动支持数据库架构一致性,也可以使用migration plugin。