Пользовательский скрипт JPA при запуске - PullRequest
2 голосов
/ 26 октября 2009

Каков наилучший способ заполнения таблиц, созданных с помощью jpa, при запуске / закрытии приложения? как, но с языком манипулирования данными вместо языка определения данных. Я использую HibernatePersistence в качестве поставщика постоянства.

Ответы [ 4 ]

3 голосов
/ 26 октября 2009

Если вы также используете пружину, то этот ответ будет работать.

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

[РЕДАКТИРОВАТЬ] Если вы не используете Spring, то вы найдете способ добраться до Hibernate Session. Вызвать метод doWork(), который позволяет запускать произвольный SQL.

Другой подход заключается в создании объектов домена и их сохранении. Я предпочитаю первый подход, так как вы можете зафиксировать идентификаторы сгенерированных объектов таким образом и делать другие вещи, более сложные, используя интерфейс JPA.

Если вы не хотите писать много операторов insert, затем вставлять данные в БД и экспортировать их с помощью инструмента SQL, такого как SquirrelSQL, который может создать для вас операторы insert. Поместите их в дополнительный файл, прочитайте файл при запуске, разбейте его на ; и выполните каждый фрагмент.

1 голос
/ 21 января 2013

Решено с помощью import.sql в пакете по умолчанию и выбора «create» в качестве значения hibernate.hbm2ddl.auto. Hibernate также поддерживает свойство hibernate.hbm2ddl.import_files .

0 голосов
/ 13 декабря 2014

В целях тестирования я использовал простой groovy-скрипт и плагин gmaven из org.codehaus.groovy.maven. Плагин gmaven выполняет скрипт groovy, а скрипт создает import.sql в течение жизненного цикла generate-test-resources maven. Использование циклов и счетчиков в скрипте намного лучше, чем ввод вручную файла, заполненного инструкциями вставки. Это, конечно, требует, чтобы у вас был отсортирован материал hbm2ddl, поскольку, похоже, вы уже разобрались с предыдущими обновлениями и ответами.

0 голосов
/ 02 марта 2014

Я думаю, заполнение ваших таблиц низкоуровневыми SQL-операторами вставки - не лучший вариант, так как вы должны вручную позаботиться о внешних ключах, а также реорганизовать эти операторы с помощью своего кода.

Поскольку у вас уже есть объектная модель и ORM, еще одно более переносимое решение - определить данные инициализации с вашими объектами и позволить JPA-провайдеру сохранить их. Хотя это решение может показаться громоздким, но при использовании таких проектов, как , это делает его более правдоподобным.

...