2009-11-06 3 views
4

Я хочу использовать GenerationType.IDENTITY для первичных ключей в моей операционной системе MySQL. Но для локальной разработки и тестирования я бы хотел использовать HSQLDB. Проблема в том, что HSQLDB не поддерживает GenerationType.IDENTITY (по крайней мере, с Eclipselink). Я попытался установить GenerationType.AUTO, который по умолчанию имеет значение TABLE для HSQLDB, но, к сожалению, он делает то же самое для MySQL, чего я не хочу. Есть ли способ переопределить это в persistence.xml? Есть ли другой трюк, который я могу использовать, чтобы каждая среда делала правильные вещи? У меня нет какой-либо конфигурации сущности, установленной в XML (все это в аннотациях), и я не хочу изменять это, поэтому я ищу способ, который позволяет избежать этого.Поддержка различных типов генерации JPA для тестирования/производства

ответ

2

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

Невозможно сделать это, используя стандартную JPA. В то время как @GeneratedValue аннотация определяет generator параметр, который позволяет вам specify a custom generator, он не предоставляет никаких механизмов для записи одного (только для использования встроенных генераторов таблицы/последовательности).

Реализация этой функции зависит от конкретного поставщика JPA (не). EclipseLink wiki has an example о том, как настраиваемый генератор может быть определен. Вам нужно будет изменить его, чтобы создать TableSequence/NativeSequence экземпляров внутри и переключиться между ними на основе session.getPlatform().

Отказ от ответственности: Я не пробовал использовать выше, используя EclipseLink; Тем не менее, я сделал что-то очень похожее в Hibernate.

1

HSQLDB, очевидно, сам поддерживает колонки IDENTITY (определенно в версии 1.8), поэтому это недостаток в EclipseLink. Например, DataNucleus предоставляет поддержку IDENTITY для HSQLDB.

Задание использования XML имеет свои преимущества при развертывании с использованием перекрестного хранилища данных, как вы точно знаете.

+0

Интересно. Я напишу о проблеме с людьми Eclipselink. Это, безусловно, упростит для меня. – Tim

Смежные вопросы