Ошибка таблицы Grails не найдена в устаревшей таблице SQL 2008

Я пытаюсь связать новый проект Grails с уже существующей базой данных SQL Server 2008, проблема в том, что когда я пытаюсь перечислить/обновить или что-то еще, ничего не работает, и я получаю сообщение об ошибке

Таблица "TEST_EXEC_QUEUE" не найдена; Оператор SQL: выберите первые 10 this_.id как id0_0_, this_.Env как Env0_0_, this_.Priority как Priority0_0_, this_.State как State0_0_, this_.subSystem как subSystem0_0_, this_.system как system0_0_, this_.test_scenario_id как test7_0_0_ из test_exec_queue this_ [42102-164]

Мой файл datasource.groovy: -

dataSource {
    pooled = false
    driverClassName = "net.sourceforge.jtds.jdbc.Driver"
    dialect = "org.hibernate.dialect.SQLServerDialect"
    }

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}


// environment specific settings
    development {
        dataSource {
            dbCreate = "update"
            url = "jdbc:jtds:sqlserver://UKSQL08;databaseName=Selenium"
        }
    }

а файл домена выглядит следующим образом, у кого-нибудь есть идеи...?

package testexecqueue

class TestExecQueueCheck {

    static constraints = {
        test_scenario_id(blank:false)
        myPriority()
        myState()
        myEnv()
        system()
        subSystem()
    }

    static mapping = {
        table "test_exec_queue"
        version false
        columns{

            test_scenario_id column:"test_scenario_id"
            myPriority column:"Priority"
            myState column:"State"
            myEnv column:"Env"
            system column:"system"
            subSystem column:"subSystem"
        }
    }

    Integer test_scenario_id
    Integer myPriority
    String myState
    String myEnv
    String system
    String subSystem
}

person MorkPork    schedule 11.03.2013    source источник


Ответы (2)


В вашем домене TestExecQueueCheck нет идентификатора. Переименуйте поле test_scenario_id просто в id. Это должно решить проблему.

person eugene82    schedule 11.03.2013
comment
Хм, похоже, это не имеет значения, я изменил все переменные с именем test_scenario_id на id, очистил и перекомпилировал и т. Д., Затем повторно запустил, и у меня все еще возникает та же проблема ... Я предполагаю, что вы не имеете в виду изменить поле базы данных на я знаю? - person MorkPork; 11.03.2013
comment
Я имею в виду только домен Grails. Мое предложение должно изменить результат: даже в вашем операторе SQL мы видим, что он включает неявный столбец id (помимо test_scenario_id). Grails всегда добавляет такой столбец автоматически. После переименования столбца проверьте новое сообщение об ошибке не найдено. Включает ли он несуществующий столбец? - person eugene82; 11.03.2013
comment
Теперь говорит select top 10 this_.test_exec_queue_id as test1_0_0_, this_.Env as Env0_0_, this_.Priority as Priority0_0_, this_.State as State0_0_, this_.subSystem as subSystem0_0_, this_.system as system0_0_, this_.test_scenario_id as test7_0_0_ from test_exec_queue this_ [42102-164] - person MorkPork; 11.03.2013
comment
Теперь он читается следующим образом package testexecqueue class TestExecQueueCheck { static constraints = { testscenarioid() myPriority() myState() myEnv() system() subSystem() } static mapping = { table "test_exec_queue" version false columns{ id column:"test_exec_queue_id" testscenarioid column:"test_scenario_id" myPriority column:"Priority" myState column:"State" myEnv column:"Env" system column:"system" subSystem column:"subSystem" } } Integer testscenarioid Integer myPriority String myState String myEnv String system String subSystem } - person MorkPork; 11.03.2013
comment
Хорошо, если можно перегенерировать таблицы, попробуйте изменить dbCreate на "create" (и перезапустить приложение) и сравнить сгенерированную схему таблицы с исходной. Если они различаются, возможно, в этом причина, и вам придется сделать так, чтобы они совпадали, каким-то другим изменением домена. - person eugene82; 11.03.2013
comment
Ну, это потенциально выдвигает на первый план более серьезную проблему, когда я пытаюсь это сделать, я все еще получаю проблему, в которой говорится то же самое, я попытался создать новую таблицу (test_exec_queue_2), чтобы сравнить две, но похоже, что она даже не подключается к SQL в первую очередь ( отсюда и сообщение о том, что таблица не найдена, я думаю) у кого-нибудь есть идеи о том, как проверить правильность соединения, кроме выполнения SQL-запросов? - person MorkPork; 11.03.2013
comment
Если ваш URL-адрес подключения и имя класса драйвера верны, подключения должны работать. Эти параметры не зависят от Grails. Таким образом, вы можете поэкспериментировать с ними (чтобы найти правильные значения) вне вашего проекта, скажем, только в скрипте Groovy. Используйте стандартные команды JDBC (см. документы и примеры драйверов), например Class.forName(...) и т.д. - person eugene82; 11.03.2013

Это может быть не ответ, но я обнаружил, что как только я указал реальную учетную запись и вернулся к соединению JDBC, проблема исчезла, так что это как-то связано с учетными записями службы Windows / JTDS, которые мне еще предстоит исследовать... Мой источник данных с использованием sqljdbc4 теперь выглядит следующим образом и работает нормально...

dataSource {
    pooled = true
    driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver"
}

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}


// environment specific settings
environments {
    development {
        dataSource {
            dbCreate = 'update' // one of 'create', 'create-drop','update'
            url = "jdbc:sqlserver://localhost;database=TestDB"
    //      databaseName = "..."
        username = "test"
        password = "test"
            dialect = org.hibernate.dialect.SQLServerDialect
            //logSql = true
        }
    }
person MorkPork    schedule 12.03.2013
comment
Кроме того, чтобы добавить к этому, если вы хотите использовать проверку подлинности Windows, вам нужно убедиться, что вы поместили в библиотеку как jdbc jar, так и auth dll, у меня возникли проблемы с тем, что я просто поместил файл jar в папку lib, и это не пока я не добавил auth dll, чтобы он начал работать, теперь это означает, что мне не нужно указывать учетную запись пользователя или пароль. - person MorkPork; 10.04.2013