启动grails应用程序时的架构导出错误

时间:2015-03-10 03:11:40

标签: grails gorm

我正在尝试遵循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

时,这种情况也开始发生了

1 个答案:

答案 0 :(得分:1)

这些是可忽略的错误 - 没有什么不好的事情发生。不幸的是,Hibernate开发人员改变了Hibernate 4中的日志记录策略,这就是你所看到的。

在Hibernate 3中,使用“create-drop”意味着删除所有当前映射表和关联对象(序列,连接等),然后运行create语句,如果jvm干净地关闭,则删除所有最后再次表格。 “create”略有不同,因为它完成了所有的drop和所有创建,但在关闭时没有做任何事情。这是我经常使用的,因为它允许我在应用程序关闭后查看基于磁盘的数据库中的数据。

所以核心问题是初始drop语句缺少“if exists”子句,有时并不是Hibernate试图丢弃的所有东西都存在。所以你得到了这些可怕的错误,但是它们是无害的,因为它们只是告诉你一些应该删除的东西从未被创建过。

在Hibernate 3中,这些错误存储在运行脚本后可以访问的字符串列表中。在Hibernate 4中,他们将其更改为记录错误,我认为因为并非所有错误都可以忽略,所以最好在实际问题中使用误报,而不是隐藏在可能很少检查的列表中的所有错误。

您可以选择忽略这些(存在忽略不相关的实际错误消息的风险),或使用生成正确SQL的自定义Dialect。一个例子是here