Могу ли я реализовать стратегию JPA if-new-create? - PullRequest
0 голосов
/ 27 октября 2010

Моя текущая стратегия создания таблицы persistence.xml настроена на создание.Это гарантирует, что каждая новая установка моего приложения будет получать таблицы, но это также означает, что каждый раз, когда приложение запускает журналы, оно загрязняется исключениями eclipselink, пытающимися создать таблицы, которые уже существуют.Стратегия, которую я желаю, состоит в том, чтобы таблицы создавались только при их отсутствии.Один из способов реализовать это - проверить файл базы данных и, если его нет, создать таблицы, используя:

ServerSession session = em.unwrap(ServerSession.class);
SchemaManager schemaManager = new SchemaManager(session);
schemaManager.createDefaultTables(true);

Но есть ли более чистое решение?Возможно, попытка поймать?Для меня является ошибкой защищать каждый метод базы данных с помощью try-catch, где catch выполняет вышеуказанный код, но я ожидаю, что это свойство, с которым я могу настроить emf.

1 Ответ

1 голос
/ 03 ноября 2010

Проблемы с созданием таблицы должны регистрироваться только на уровне предупреждения. Таким образом, вы можете отфильтровать их, установив уровень журнала выше, чем предупреждение, или создать отдельную EM, которая отражает реальную EM приложения, которая будет использоваться только для создания таблицы, но с полностью отключенным ведением журнала.

Что касается перехвата исключений из createDefaultTables - их не должно быть. Внутренние элементы createDefaultTables оборачивают фактическую часть createTable и игнорируют ошибки, которые она может выдать. Таким образом, исключения отображаются только в журнале из-за уровня журнала, включая предупреждающие сообщения. Вы можете обернуть его в try / catch и отключить уровень журнала сеанса, а затем сбросить его в блоке finally.

...