我正在尝试遵循Grails 2 - A快速入门指南一书中的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:
除了两个域类和脚手架控制器之外,我的应用程序中没有任何内容......
以下是域类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 Domain类
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;
}
我无法跟踪这里出现的问题......或者我可以忽略这是一个良性错误。
当我将organizingUser
类中TekEvent
的数据类型从String
更改为TekUser
答案 0 :(得分:1)
这些是可忽略的错误 - 没有什么不好的事情发生。不幸的是,Hibernate开发人员改变了Hibernate 4中的日志记录策略,这就是你所看到的。
在Hibernate 3中,使用“create-drop”意味着删除所有当前映射表和关联对象(序列,连接等),然后运行create语句,如果jvm干净地关闭,则删除所有最后再次表格。 “create”略有不同,因为它完成了所有的drop和所有创建,但在关闭时没有做任何事情。这是我经常使用的,因为它允许我在应用程序关闭后查看基于磁盘的数据库中的数据。
所以核心问题是初始drop语句缺少“if exists”子句,有时并不是Hibernate试图丢弃的所有东西都存在。所以你得到了这些可怕的错误,但是它们是无害的,因为它们只是告诉你一些应该删除的东西从未被创建过。
在Hibernate 3中,这些错误存储在运行脚本后可以访问的字符串列表中。在Hibernate 4中,他们将其更改为记录错误,我认为因为并非所有错误都可以忽略,所以最好在实际问题中使用误报,而不是隐藏在可能很少检查的列表中的所有错误。
您可以选择忽略这些(存在忽略不相关的实际错误消息的风险),或使用生成正确SQL的自定义Dialect。一个例子是here