启动 grails 应用程序时模式导出错误
Schema Export Errors while launching grails application
我正在尝试学习 Grails 2 - 快速入门指南一书中的 Grails 应用程序。我正在使用的 grails 版本是 Ubuntu 14.04 上的 2.4.4,打开 jdk 7
我收到以下错误
Error 2015-03-09 20:05:02,117 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table tek_event drop constraint FK_1xbf5b7edlnmgmrc90jhbyvg7 if exists
| Error 2015-03-09 20:05:02,118 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - Table "TEK_EVENT" not found; SQL statement:
我的应用程序中除了两个域 classes 和脚手架控制器外什么都没有...
这是域 classes TekUser 和 TekEvent
class TekEvent {
String city
String name
TekUser organizingUser
String venue
Date startDate
Date endDate
String description
String toString(){
"$name, $city"
}
static constraints = {
name()
city()
description maxSize:5000
organizingUser()
venue()
startDate ()
endDate()
}
}
以及 TekUser 域 class
class TekUser {
String fullName
String userName
String password
String email
String website
String bio
String toString(){
fullName
}
static constraints = {
fullName()
userName()
email()
website()
bio maxSize:5000
}
}
他们的控制器非常准系统
class TekEventController {
def scaffold = TekEvent;
}
class TekUserController {
def scaffold = TekUser;
}
我无法了解这里出了什么问题...或者这是一个我可以忽略的良性错误。
当我将 TekEvent
class 中 organizingUser
的数据类型从 String
更改为 TekUser
时,这也开始发生
这些是可忽略的错误 - 没有发生任何不良情况。不幸的是,Hibernate 开发人员更改了 Hibernate 4 中的日志记录策略,这就是您所看到的。
在 Hibernate 3 中,使用 "create-drop" 意味着删除所有当前映射表和关联对象(序列、连接等),然后 运行 创建语句,如果 jvm 关闭干净地,最后再次删除所有表。 "create" 略有不同,因为它执行所有删除和所有创建,但在关闭时不执行任何操作。这是我经常使用的一个,因为它可以让我在应用程序关闭后查看基于磁盘的数据库中的数据。
所以核心问题是初始的 drop 语句缺少 "if exists" 子句,有时 Hibernate 试图删除的并不是所有的东西都存在。所以你会得到这些看起来很可怕的错误,但它们是无害的,因为它们只是告诉你一些应该删除的东西从未创建过。
在 Hibernate 3 中,这些错误存储在字符串列表中,您可以在 运行 执行脚本后访问这些字符串。在 Hibernate 4 中,他们将其更改为记录错误,我假设因为并非该阶段的所有错误都是可以忽略的,所以最好在真正的问题中包含误报,而不是隐藏在可能很少检查的列表中的所有内容。
您可以选择忽略这些(冒着忽略不相关的实际错误消息的风险),或使用生成正确 SQL 的自定义方言。一个例子是 here
我正在尝试学习 Grails 2 - 快速入门指南一书中的 Grails 应用程序。我正在使用的 grails 版本是 Ubuntu 14.04 上的 2.4.4,打开 jdk 7
我收到以下错误
Error 2015-03-09 20:05:02,117 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - HHH000389: Unsuccessful: alter table tek_event drop constraint FK_1xbf5b7edlnmgmrc90jhbyvg7 if exists
| Error 2015-03-09 20:05:02,118 [localhost-startStop-1] ERROR hbm2ddl.SchemaExport - Table "TEK_EVENT" not found; SQL statement:
我的应用程序中除了两个域 classes 和脚手架控制器外什么都没有...
这是域 classes TekUser 和 TekEvent
class TekEvent {
String city
String name
TekUser organizingUser
String venue
Date startDate
Date endDate
String description
String toString(){
"$name, $city"
}
static constraints = {
name()
city()
description maxSize:5000
organizingUser()
venue()
startDate ()
endDate()
}
}
以及 TekUser 域 class
class TekUser {
String fullName
String userName
String password
String email
String website
String bio
String toString(){
fullName
}
static constraints = {
fullName()
userName()
email()
website()
bio maxSize:5000
}
}
他们的控制器非常准系统
class TekEventController {
def scaffold = TekEvent;
}
class TekUserController {
def scaffold = TekUser;
}
我无法了解这里出了什么问题...或者这是一个我可以忽略的良性错误。
当我将 TekEvent
class 中 organizingUser
的数据类型从 String
更改为 TekUser
这些是可忽略的错误 - 没有发生任何不良情况。不幸的是,Hibernate 开发人员更改了 Hibernate 4 中的日志记录策略,这就是您所看到的。
在 Hibernate 3 中,使用 "create-drop" 意味着删除所有当前映射表和关联对象(序列、连接等),然后 运行 创建语句,如果 jvm 关闭干净地,最后再次删除所有表。 "create" 略有不同,因为它执行所有删除和所有创建,但在关闭时不执行任何操作。这是我经常使用的一个,因为它可以让我在应用程序关闭后查看基于磁盘的数据库中的数据。
所以核心问题是初始的 drop 语句缺少 "if exists" 子句,有时 Hibernate 试图删除的并不是所有的东西都存在。所以你会得到这些看起来很可怕的错误,但它们是无害的,因为它们只是告诉你一些应该删除的东西从未创建过。
在 Hibernate 3 中,这些错误存储在字符串列表中,您可以在 运行 执行脚本后访问这些字符串。在 Hibernate 4 中,他们将其更改为记录错误,我假设因为并非该阶段的所有错误都是可以忽略的,所以最好在真正的问题中包含误报,而不是隐藏在可能很少检查的列表中的所有内容。
您可以选择忽略这些(冒着忽略不相关的实际错误消息的风险),或使用生成正确 SQL 的自定义方言。一个例子是 here