2012-10-19 41 views
4

所以我有一些簡單的領域類,我已經確保沒有使用任何PostgreSQL(或任何其他供應商,就此而言)保留字。執行grails schema-export會生成一個ddl,它在針對同一個數據庫運行時將成功執行,並創建所有表格而不會出現問題。帶PostgreSQL的Grails不會生成表

但是,在運行我的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,9.2.1的PostgreSQL

自舉的要求:

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 = { 
    } 
} 
+0

我在配置中看不到任何明顯的問題,它與我使用的差不多。但我不是專家。我使用postgresql進行生產,H2使用開發。沒有問題。如果你使用H2作爲開發環境,那麼它工作嗎? – Henrik

+0

請向我們展示您的引導程序代碼 – nickdos

+0

使用H2我認爲一切都很好,但很難說,因爲我從來沒有在BootStrap中有過任何東西,我從來沒有真正檢查過這些表。很確定我通過一個控制器創建了一個域,並且它保存了沒有失敗。當我有更多時間時,我會再次檢查H2。上面添加了BootStrap。 – kz3

回答

3

這可能是的pgsql的和GORM的特質,因爲它涉及到自動生成的序列編號,以及標識在pgsql中是一個保留字。確保在你的域對象中使用類似user_id的東西(使用適當的表格語法)而不是id。