Я хочу использовать GenerationType.IDENTITY для первичных ключей в моей операционной системе MySQL. Но для локальной разработки и тестирования я бы хотел использовать HSQLDB. Проблема в том, что HSQLDB не поддерживает GenerationType.IDENTITY (по крайней мере, с Eclipselink). Я попытался установить GenerationType.AUTO, который по умолчанию имеет значение TABLE для HSQLDB, но, к сожалению, он делает то же самое для MySQL, чего я не хочу. Есть ли способ переопределить это в persistence.xml? Есть ли другой трюк, который я могу использовать, чтобы каждая среда делала правильные вещи? У меня нет какой-либо конфигурации сущности, установленной в XML (все это в аннотациях), и я не хочу изменять это, поэтому я ищу способ, который позволяет избежать этого.Поддержка различных типов генерации JPA для тестирования/производства
ответ
Основная идея здесь - использовать пользовательский генератор, который будет внутренне переключаться между идентификатором и таблицей (или любыми другими стратегиями, которые вам нужны) на основе информации метаданных.
Невозможно сделать это, используя стандартную JPA. В то время как @GeneratedValue
аннотация определяет generator
параметр, который позволяет вам specify a custom generator, он не предоставляет никаких механизмов для записи одного (только для использования встроенных генераторов таблицы/последовательности).
Реализация этой функции зависит от конкретного поставщика JPA (не). EclipseLink wiki has an example о том, как настраиваемый генератор может быть определен. Вам нужно будет изменить его, чтобы создать TableSequence
/NativeSequence
экземпляров внутри и переключиться между ними на основе session.getPlatform()
.
Отказ от ответственности: Я не пробовал использовать выше, используя EclipseLink; Тем не менее, я сделал что-то очень похожее в Hibernate.
HSQLDB, очевидно, сам поддерживает колонки IDENTITY (определенно в версии 1.8), поэтому это недостаток в EclipseLink. Например, DataNucleus предоставляет поддержку IDENTITY для HSQLDB.
Задание использования XML имеет свои преимущества при развертывании с использованием перекрестного хранилища данных, как вы точно знаете.
- 1. Поддержка различных типов для перегруженных операторов?
- 2. Лучший подход для увязки различных типов объектов в JPA
- 3. Различных типов для петель
- 4. алгоритм для генерации различных заказов
- 5. Поддержка JPA/Hibernate для миграции?
- 6. jpa hibernate: последовательность типов генерации всегда вставляет 0 в столбец
- 7. Фильтр для различных типов scala
- 8. Терминология для различных типов функций
- 9. Поддержка различных версий Python
- 10. Поддержка различных размеров андроида?
- 11. Поддержка различных экранов
- 12. Поддержка различных экранов
- 13. JPA хранения различных типов файлов в базе данных (JEE6)
- 14. python3: поддержка различных кодировок
- 15. Android - Поддержка различных экранов
- 16. JPA классы генерации ошибок
- 17. Геопространственная поддержка в JPA
- 18. javax.xml.parsers.DocumentBuilder поддержка сложных типов
- 19. Concat Наблюдения различных типов
- 20. Сортировка списка различных типов
- 21. Реестр данных различных типов
- 22. Различных типов сопоставимого
- 23. Перебор различных типов
- 24. Concat различных типов наблюдаемых
- 25. Generic Умножение различных типов
- 26. Создать стек различных типов
- 27. поддержка Java для трех различных моделей параллелизма
- 28. Определить переменную различных типов
- 29. создание различных типов пользователей
- 30. Список различных типов?
Интересно. Я напишу о проблеме с людьми Eclipselink. Это, безусловно, упростит для меня. – Tim