Подтвердить что ты не робот

Ошибки Grails 2.4 и hibernate4 с run-app

Я обновил приложение до Grails 2.4.0, и я использую плагин hibernate4. При выполнении run-app приведенные ниже примеры ошибок генерируются для каждого класса домена с использованием базы данных в памяти. Я читал несколько сообщений на форумах спящего режима, что ошибки не являются серьезными. Он просто регистрирует ошибку, потому что таблица, которую она пытается удалить, еще не существует.

2014-Mai-24 13: 25: 26,788 ОШИБКА [localhost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport - SchemaExport.java 425 - HHH000389: Неудачный: изменить ограничение на ограничение пользователя user_role FK_apcc8lxk2xnug8377fatvbn04, если существует

2014-Mai-24 13: 25: 26,789 ОШИБКА [localhost-startStop-1] org.hibernate.tool.hbm2ddl.SchemaExport - SchemaExport.java 426 - таблица "USER_ROLE" не найдена; Оператор SQL: alter table user_role drop ограничение FK_apcc8lxk2xnug8377fatvbn04, если существует [42102-173]

Кто-нибудь знает, как остановить шум журналирования?

4b9b3361

Ответ 1

Это ошибка, кажется, что вы можете оставить ее таким образом и не вызовет никаких проблем, но если вы не хотите видеть сообщение, вот некоторые решения: (Изменить: вариант 2, похоже, работает лучше (см. комментарии в этом посте))

1.- Конфигурация singleSession из DataSource.groovy

https://jira.grails.org/browse/GRAILS-11198

2.- переопределение диалекта H2:

public class ImprovedH2Dialect extends H2Dialect {
    @Override
    public String getDropSequenceString(String sequenceName) {
        // Adding the "if exists" clause to avoid warnings
        return "drop sequence if exists " + sequenceName;
    }

    @Override
    public boolean dropConstraints() {
        // We don't need to drop constraints before dropping tables, that just
        // leads to error messages about missing tables when we don't have a
        // schema in the database
        return false;
    }
}

Неудачно: измените ограничение XXX ограничения кавычки YYY в автономном режиме Hibernate/JPA/HSQLDB

Ответ 2

Решение @Luis, приведенное выше, также работает для MYSQL. Просто добавьте MySQL5InnoDBDialect, как показано ниже:

import org.hibernate.dialect.MySQL5InnoDBDialect;

public class ImprovedMySQLDialect extends MySQL5InnoDBDialect {
    @Override
    public String getDropSequenceString(String sequenceName) {
        // Adding the "if exists" clause to avoid warnings
        return "drop sequence if exists " + sequenceName;
    }

    @Override
    public boolean dropConstraints() {
        // We don't need to drop constraints before dropping tables, that just leads to error
        // messages about missing tables when we don't have a schema in the database
        return false;
    }
}

Затем в вашем файле источника данных измените следующую строку:

dialect = org.hibernate.dialect.MySQL5InnoDBDialect

к

dialect = my.package.name.ImprovedMySQLDialect

Ответ 3

Просто установите dbCreate="update", и ошибки немедленно исчезнут.

Проблема в том, что GORM (hibernate) пытается удалить таблицы в базе данных H2, которые никогда не создавались, потому что при каждом запуске приложения создается новый БД. К сожалению, dbCreate настроен на создание-drop по умолчанию, что действительно не имеет смысла для базы данных, которая создается "на лету" во время выполнения.

development {
    dataSource {
        dbCreate = "update" // one of 'create', 'create-drop', 'update', 'validate', ''
        url = "jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE"
    }