Сделайте сбой EcliseLink, если при выполнении операторов DDL произошла ошибка - PullRequest
0 голосов
/ 25 августа 2011

Мы используем EclipseLink для постоянного хранения и настроили EclipseLink для автоматического создания таблиц базы данных и т. Д., Установив для свойства eclipselink.ddl-generation значение drop-and-create-tables.

Это работает нормально, однако EclipseLink (и, следовательно, наше приложение) будет весело продолжать работу во время модульных тестов и при реальном запуске веб-приложения, даже если некоторые из операторов DDL не пройдены.

Я заметил это, когда неправильно использовал аннотацию @Index, и удивился, почему индекс не был создан, пока не заметил в журналах:

org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: org.h2.jdbc.JdbcSQLException: 
Column "MY_INDEX_FLD" not found; SQL statement:
CREATE INDEX X_INDEX ON X (MY_INDEX_FLD)

Я действительно хочу знать, если это произойдет. Есть ли какой-нибудь способ сообщить EclipseLink, что он может привести к фатальной ошибке в случае сбоя некоторых операторов DDL?

Я бы хотел, чтобы по крайней мере наши (JUnit) интеграционные тесты не прошли в этом случае.

Бонусные баллы за некоторый способ быть в состоянии игнорировать, если ошибка просто в том, что таблицы уже есть (в случае тестирования с существующей базой данных).

1 Ответ

0 голосов
/ 29 августа 2011

Очевидно, что EclipseLink не может этого сделать.

Я посмотрел на метод в EclipseLink, который создает таблицы:

org.eclipse.persistence.tools.schemaframework.TableCreator.createTables ()

(поиск «createTables» на странице).

I содержит строки:

        try {
            schemaManager.createObject(table);
            session.getSessionLog().log(SessionLog.FINEST,
                "default_tables_created", table.getFullName());
        } catch (DatabaseException ex) {
            session.getSessionLog().log(SessionLog.FINEST,
            "default_tables_already_existed", table.getFullName());
                if (!shouldIgnoreDatabaseException()) {
                    throw ex;
                }
        }

Итакочевидно, EclipseLink предполагает, что ошибки при создании таблицы (и индекса) всегда вызваны уже существующей таблицей: - (.

Я подал ошибку EclipseLink для этого: Ошибка 356068 .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...