2015-12-24 2 views
3

Допустимые значения javax.persistence.schema-generation.database.action неКак использовать свойство JPA 2.1 javax.persistence.schema-generation.database.action?

  • ни (что не служит ничего ...)
  • создания (который работает только в первый раз при запуске приложения, поскольку все дальнейшие начинается не из-за большинства баз данных (например derby 11.x), если создана уже существующая схема
  • drop-and-create (которая никогда не сохранит какие-либо данные, что вызывает вопрос о том, почему она является частью стандартной спецификации персистентности - при условии отладки)
  • падение (симметрично сбой create преуспевает

который не оставляет абсолютно никакого выбора, чтобы использовать любого из этих ценностей и я не вижу никакого смысла в их спецификации - если вы не хочет, чтобы пользователь вашего приложения, чтобы запустить приложение один раз (с create), взломать persistence.xml файл, переупаковка вашего приложения и использование его с none. Как использовать их для сохранения объектов Java через перезапуск приложений?

Я знаю о Hibernate's hibernate.hbm2ddl.auto, который отлично работает, но я пытаюсь получить тайну для решения портативного подхода JPA 2.1.

ответ

4

Вряд ли любая загадка (и они определены в спецификации или в документах для любой достойной реализации JPA). Это выполняется, когда создается EMF (или как отдельная передняя операция, если она вызвана через Persistence.).

"none" означает ничего не делать ... так что JPA всегда делала что-то вроде настойчивости. Это не значит «служить любой цели», просто чтобы не делать ничего лишнего!

"create" означает создание таблиц для объектов (поэтому предполагается, что они еще не существуют). Очевидно, что большинство поставщиков JPA проверит наличие таблиц до создания, поэтому оно не будет «терпеть неудачу при последующем использовании».

"drop" означает отбрасывание таблиц для объектов (поэтому при работе в автономном режиме очистка после тестов, например).

"drop-and-create" Отбросьте и создайте таблицы для объектов, чтобы избавиться от того, что было там, и начать с нуля. Нет ничего общего с сохраняющимися данными, но тогда ни один из этих вариантов не существует.

Как было сказано, некоторые из этих вариантов наиболее полезны для тестирования. В реальной ситуации большинство людей будут генерировать DDL, уточнять его, чтобы соответствовать их требованиям к базам данных, и генерировать его вручную, а затем просто запускать JPA, следовательно, не использовать это свойство во время выполнения

+0

достаточно, но это все еще небольшой сервер/JPA конкретный поставщик. Например, на Glassfish 4 +/Payara я заметил, что генерация схемы не запускается до тех пор, пока вы полностью не развернете и не развернете приложение. – Gimby

+0

Спасибо за объяснение. Если эффект 'clear' зависит от провайдера JPA, то нет определенного подхода к перекрестному провайдеру, не так ли? –

+0

@ Карл Рихтер, что вы подразумеваете под понятием? очистить базу данных таблиц? –