使用PostgreSQL的Grails不生成表

时间:2012-10-19 01:53:18

标签: hibernate postgresql grails gorm

所以我有一些简单的域类,我确保不使用任何PostgreSQL(或其他任何供应商)保留字。执行grails schema-export会生成一个ddl,当针对同一个数据库运行时,它将成功执行,并创建所有表而不会出现问题。

但是,在运行我的grails应用程序时,我收到错误ERROR: relation "artist" does not exist。 (艺术家是我试图在BootStrap.groovy中创建样本的域名。)

查看我的数据库,我可以看到没有为我的域创建任何表。

我已为org.hibernate启用了所有日志记录,但没有任何内容可以表明存在任何问题。我能看到的唯一问题是没有与任何表的创建有关的日志记录,只有看似简单选择的样本查询。

这是我的DataSource.groovy:

dataSource {
    pooled = true
    driverClassName = "org.postgresql.Driver"
    dialect = "org.hibernate.dialect.PostgreSQLDialect"
    username = "my_username"
    password = "my_password"
}
hibernate {
    cache.use_second_level_cache = false
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
    development {
        dataSource {
            dbcreate = "create-drop"
            url = "jdbc:postgresql://localhost:5432/dev"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:postgresql://localhost:5432/test"
        }
    }
    production {
        dataSource {
            dbCreate = "update"
            url = "jdbc:postgresql://localhost:5432/prod"
            pooled = true
            properties {
               maxActive = -1
               minEvictableIdleTimeMillis=1800000
               timeBetweenEvictionRunsMillis=1800000
               numTestsPerEvictionRun=3
               testOnBorrow=true
               testWhileIdle=true
               testOnReturn=true
               validationQuery="SELECT 1"
           }
       }
    }
}

我已验证凭据(上面的伪造)有效,用户有权限,数据库正在指定位置运行等。

我有什么遗漏,或者我可以启用的任何其他类型的日志记录,可能会显示错误是什么,或者有助于找到它?

我发现最令人好奇的是schema-export生成的ddl运行得很好。 grails是否在运行时以不同方式生成SQL,或者是否有任何会导致grails不执行任何create语句的内容?

Grails版本2.1.1,PostgreSQL 9.2.1

按要求提供BootStrap:

import my.site.domain.artist.*

class BootStrap {

    def init = { servletContext ->
        System.out.println("\n")
        log.info("---------------------------------------------------")
        log.info("BootStrap initializing...")
        log.info("---------------------------------------------------")
        TimeZone.setDefault(TimeZone.getTimeZone("UTC"))
        log.info("Default TimeZone set to " + TimeZone.getDefault().displayName)

        Artist artist = new Artist(artistName: 'Artist Name', shortBio: "Short Bio", biography: "Bio", url: "/some_artist")

        artist.save()
        if(artist.hasErrors()) {
            log.info(artist.errors)
        } else {
            log.info("--Artist--")
            log.info("dateCreated: " + artist.dateCreated)
            log.info("lastUpdated: " + artist.lastUpdated)
            log.info("mediumImageURL: " + artist.mediumImageURL)
        }
    }

    def destroy = {
    }
}

1 个答案:

答案 0 :(得分:3)

它可能是pgsql和gorm的特性,因为它与ID的自动生成序列以及id是pgsql中的保留字有关。确保在您的域对象中使用类似user_id(具有适当的表语法)而不是id。