2012-10-19 3 views
4

그래서 나는 PostgreSQL (또는 다른 모든 공급자, 그 문제와 관련하여) 예약어를 사용하지 않는다는 것을 보장하는 간단한 도메인 클래스를 가지고 있습니다. grails schema-export을 실행하면 동일한 데이터베이스에 대해 실행할 때 ddl이 성공적으로 실행되고 문제없이 모든 테이블이 생성됩니다.PostgreSQL에서 테이블을 생성하지 않는 Grails

그러나 내 grails 애플리케이션을 실행할 때 ERROR: relation "artist" does not exist 오류가 발생합니다. (아티스트는 BootStrap.groovy에서 샘플을 생성하려고 시도하는 도메인 임).

내 데이터베이스를 보면 내 도메인 용으로 만들어진 테이블이 없다는 것을 알 수 있습니다.

org.hibernate에 대한 모든 로깅을 사용할 수 있지만 문제가 있음을 나타내는 것은 없습니다. 내가 볼 수있는 유일한 문제는 테이블 생성과 관련된 로깅이없고 간단한 선택에 대한 샘플 쿼리 인 것으로 나타납니다. 나는 데이터베이스가 지정된 위치에 실행되는 자격 증명 (이상 가짜가) 유효한지, 사용자가 권한이 검증 한

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" 
      } 
     } 
    } 
} 

: 여기

내 DataSource.groovy에있다 제가 누락 된 것이 있습니까, 아니면 내가 할 수있는 다른 유형의 로깅이 오류가 무엇인지를 보여 주거나 찾는데 도움이 될까요?

가장 흥미로운 점은 schema-export에 의해 생성 된 ddl이 정상적으로 작동한다는 것입니다. grails는 런타임에 SQL을 다르게 생성합니까? 아니면 grails가 create 문을 실행하지 못하게 할 수 있습니까?

Grails는 버전 2.1.1, 9.2.1 PostgreSQL을 요청한

스트랩 :이 자료뿐만 아니라 ID에 대해 자동으로 생성 된 시퀀스에 관련된

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를 사용하고 있습니다. 전혀 문제 없습니다. dev 환경에서 H2를 사용한다면 작동합니까? – Henrik

+0

부트 스트랩 코드를 알려주십시오 – nickdos

+0

H2 사용하기 저는 모든 것이 좋다고 생각합니다.하지만 부트 스트랩에서 아무 것도 얻지 못했고 실제로 테이블을 체크하지 않았기 때문에 말하기가 어려웠습니다. 확실히 컨트롤러를 통해 도메인을 만들었지 만 확실히 저장되었습니다. 나중에 좀 더 시간이있을 때 H2를 다시 점검 할 것입니다. BootStrap이 위에 추가되었습니다. – kz3

답변

3

그것은 pgSQL의 GORM과의 특이성 일 수 pgsql의 예약어입니다. 도메인 객체에서 ID가 아니라 user_id (적절한 테이블 구문 사용)와 같은 것을 사용하는지 확인하십시오.

관련 문제