4

そのため、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"
           }
       }
    }
}

資格情報 (上記の偽物) が有効であること、ユーザーに権限があること、データベースが指定された場所で実行されていることなどを確認しました。

不足しているものはありますか、またはエラーの内容を表示したり、エラーを見つけるのに役立つ可能性のある他の種類のログを有効にすることはできますか?

最も興味深いのは、によって生成された ddl が正常にschema-export実行されることです。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 = {
    }
}
4

1 に答える 1

3

これは、pgsql の予約語である id と同様に、ID の自動生成されたシーケンスに関連するため、pgsql と gorm の特異性である可能性があります。ドメイン オブジェクトでは、id ではなく user_id (適切なテーブル構文を使用) などを使用してください。

于 2012-10-25T03:33:50.007 に答える