Grails in Action第二版-生成脚手架时出错

Grails in Action第二版-生成脚手架时出错,grails,Grails,我一直在努力尝试使用Groovy Grails工具套件自学Grails GGTS 3.6.4 Grails2.4.4 JDK 1.8.0_45 我在书中的第92页,有两个问题: 运行Grails控制台时,我收到以下错误: Error | 2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table post drop constraint FK_kpfnivid3

我一直在努力尝试使用Groovy Grails工具套件自学Grails

GGTS 3.6.4 Grails2.4.4 JDK 1.8.0_45

我在书中的第92页,有两个问题:

运行Grails控制台时,我收到以下错误:

Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table post drop constraint FK_kpfnivid38f5bwx3yl1lxeeae if exists
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "POST" not found; SQL statement:
alter table post drop constraint FK_kpfnivid38f5bwx3yl1lxeeae if exists [42102-176]
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table post_tags drop constraint FK_rf0kr7eqk5xoalmc4gigdwg3p if exists
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "POST_TAGS" not found; SQL statement:
alter table post_tags drop constraint FK_rf0kr7eqk5xoalmc4gigdwg3p if exists [42102-176]
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table post_tags drop constraint FK_n8k2owli9ecanh4phj01mddvv if exists
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "POST_TAGS" not found; SQL statement:
alter table post_tags drop constraint FK_n8k2owli9ecanh4phj01mddvv if exists [42102-176]
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table profile drop constraint FK_c1dkiawnlj6uoe6fnlwd6j83j if exists
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "PROFILE" not found; SQL statement:
alter table profile drop constraint FK_c1dkiawnlj6uoe6fnlwd6j83j if exists [42102-176]
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table tag drop constraint FK_151ooxskkpn49blwsh7mjwysx if exists
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "TAG" not found; SQL statement:
alter table tag drop constraint FK_151ooxskkpn49blwsh7mjwysx if exists [42102-176]
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table user_user drop constraint FK_s7pwk9swjfqs0w7ub9tt5s47y if exists
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "USER_USER" not found; SQL statement:
alter table user_user drop constraint FK_s7pwk9swjfqs0w7ub9tt5s47y if exists [42102-176]
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - HHH000389: Unsuccessful: alter table user_user drop constraint FK_1hl85r166108l1vgkxycm3cq0 if exists
Error |
2015-09-29 08:03:29,168 [main] ERROR hbm2ddl.SchemaExport  - Table "USER_USER" not found; SQL statement:
alter table user_user drop constraint FK_1hl85r166108l1vgkxycm3cq0 if exists [42102-176]
我猜问题是因为我没有将DataSource.groovy文件更改为“update”而不是“create drop”,并将数据库从内存中释放出来

我没有测试这个理论,因为Grails控制台仍然在运行,这导致了我的第二个错误

我们被告知使用以下命令生成4个控制器:

create-scaffold-controller com.grailsinaction.User
create-scaffold-controller com.grailsinaction.Profile
create-scaffold-controller com.grailsinaction.Post
create-scaffold-controller com.grailsinaction.Tag
每次,我都会收到一个EOF预期错误:

1 compilation error:

expecting EOF, found 'com' at line: 1, column: 28
这两个错误似乎并不相关,与其跳过它,我真的很想了解到底发生了什么

任何帮助都将不胜感激。

将DataSource.groovy文件改为“更新”而不是“创建删除”,并将数据库从内存中取出

这是假设您已将数据源配置为连接到真实数据库

我可以看到hbm2ddl是上面的日志,对于内存中的内部DB,它应该是“create drop”

要“更新”的DataSource.groovy文件告诉应用程序只更新现有表,这不会创建任何新表

在连接到MySQL的实际应用程序中。此设置相当于您还可以手动更新数据库并创建在开发中设计的任何新表

“create drop”的DataSource.groovy文件正如名称所述,它将创建新表和drop条目,因此对于开发环境,甚至一些其他环境(如test),您可能很乐意将其保留在create drop上,让grails生成表

唯一需要注意的一件事是,如果您有一个让我们假设您有一个具有

Boolean isValid

static constraints { 
 isValid(nullable:false)
}
如果您稍后决定no,那么在MySQL示例中,它实际上应该是可以为null的,那么您必须登录到它并手动调整它,因为它已经创建了。在内联内存的情况下,您的示例谁关心下一次运行app=fresh db

关于: 创建脚手架控制器

这是一个新的,它看起来是正确的,你正在执行的

但是为了简化或扩展范围,如果我理解正确的话,我还没有开始深入研究该命令的作用,但肯定离手动执行类似操作已经不远了

grails创建控制器com.grailsinaction.User

然后转到user类并执行以下操作:

class UserController {
  static scaffold = true   
}
保存每个文档的重复,然后继续处理文档

在此了解有关脚手架概念的更多信息:

此外,如果您使用的是GGT,请用鼠标右键浏览域类,然后选择“我认为grails生成控制器和视图”

这将是脚手架的替代方案,脚手架动态地提供给您,然后生成供您使用和编辑。这是一个进入grails的好方法,因为它提供了您可以查看/编辑和学习的内容


脚手架只是隐藏了所有这些,并且是隐藏生成内容的一种整洁的方式。

很抱歉“GobblyBook”中有很长的段落。我还是个新手,不知道如何正确格式化这些内容。。。