Почему grails использует hsqldb, когда я запрашиваю mysql? - PullRequest
0 голосов
/ 24 марта 2010

Я следую примеру беговой дорожки из книги Джейсона Рудольфа в InfoQ , используя grails-1.2.1. Я подошел к той части, где я должен был перейти с hsqldb на mysql. Я думаю, что я удалил все ссылки на hsqldb в файле DataSource.groovy, но получаю исключение, и трассировка стека показывает, что он все еще использует hsqldb.

DataSource.groovy

dataSource {
    boolean pooled = true
    String driverClassName = "com.mysql.jdbc.Driver"
    String url = "jdbc:mysql://localhost/dfpc2"
    String dbCreate = "create"
    String username = "dfpc2"
    String password = "dfpc2"
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
}
hibernate {
    cache.use_second_level_cache=true
    cache.use_query_cache=true
    cache.provider_class='net.sf.ehcache.hibernate.EhCacheProvider'
}
// environment specific settings
environments {
    development {
    }
    test {
    }
    production {
    }
}

Когда я grails run-app все запускается без ошибок. Я могу перейти на домашнюю страницу. Но когда я нажимаю на одну из ссылок, я получаю трассировку стека:

java.sql.SQLException: Table not found in statement [select this_.id as id0_0_, this_.version as version0_0_, this_.name as name0_0_, this_.variant as variant0_0_ from domainObject this_ limit ?]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at dfpc2.domainObjectController$_closure2.doCall(script1269434425504953491149.groovy:13)
at dfpc2.domainObjectController$_closure2.doCall(script1269434425504953491149.groovy)
at java.lang.Thread.run(Thread.java:619)

В моей базе данных mysql не создано ни одной таблицы. (Я не думаю, что Groovy еще связан с MySQL.)

Вещи, которые я проверял:

  1. mysql-connector-java-5.1.6.jar находится в каталоге lib.
  2. Я пробовал grails clean
  3. Я пытался поместить информацию источника данных в среду разработки (я еще не закончил тестировать или тестировать), но, похоже, это не имело никакого значения. Стандарт показывает, что я использую среду разработки.

Я гуглил по решениям, но единственное решение, которое я нашел, - это когда люди не меняют тестовую или производственную среду.

Ответы [ 2 ]

6 голосов
/ 24 марта 2010

Проблема заключалась в объявлениях типов. Вместо

dataSource {
    boolean pooled = true
    String driverClassName = "com.mysql.jdbc.Driver"
    String url = "jdbc:mysql://localhost/dfpc2"
    String dbCreate = "create"
    String username = "dfpc2"
    String password = "dfpc2"
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
}

должно было иметь:

dataSource {
    pooled = true
    driverClassName = "com.mysql.jdbc.Driver"
    url = "jdbc:mysql://localhost/dfpc2"
    dbCreate = "create"
    username = "dfpc2"
    password = "dfpc2"
    dialect = org.hibernate.dialect.MySQL5InnoDBDialect 
}

Нашел ответ в Grails Doco:

При настройке DataSource не указывайте ключевое слово type или def перед какими-либо параметрами конфигурации, поскольку Groovy будет рассматривать их как определения локальных переменных, и они не будут обрабатываться. Например, следующее неверно:

boolean pooled = true 
1 голос
/ 24 марта 2010

Эта книга устарела, и InfoQ должна вытащить ее или добавить ссылку на второе издание, вышедшее недавно и основанное на Grails 1.2: http://www.infoq.com/minibooks/grails-getting-started

...