2010-10-27 1 views
0

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

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

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

ответ

1

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

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