Использование hibernate - хорошая возможность.
Некоторые встроенные базы данных существуют , поэтому вы можете запустить их при запуске приложения перед запуском гибернации.
Преимущество, конечно, состоит в том, что если вы когда-нибудь захотите преобразовать код из автономного в серверный режим, ваша модель java bean-hibernate-db также будет очень хорошо работать в этом контексте. Сериализация в ваш собственный формат - это все равно что создавать свою собственную базу данных с плоскими файлами, и зачем писать ее снова, когда она уже сделана для вас. Я также собирался предложить Apache Derby для встроенного использования (От: Java Drinker)
Для части миграции самый простой способ - это иметь в базе данных таблицу версий, сообщающую, какая версия является текущей, а затем при запуске приложения, после запуска базы данных, но до создания сеанса. Фабрика (или менеджер сущностей) проверяет текущую версию базы данных, проверяет в файле миграции sql последнюю версию и, если обе не совпадают, выполняет все запросы sql выше текущей версии базы данных.
Файл миграции может выглядеть так:
-- version:1
sql query 1 (update, alter, ...)
-- version:2
sql query 2
...
Вы должны быть очень осторожны при написании файла миграции. Например, всегда учитывайте, что в таблице есть данные (никогда не добавляйте в таблицу необнуляемый столбец, а вместо этого добавляйте столбец, обновляйте столбец, а затем добавляйте ограничение ненулевого значения).
[редактировать]
Если база данных не существует или является пустой (например, таблица версий отсутствует), вы начинаете с создания базы данных, а затем начинаете миграцию из старого формата в формат базы данных. Код будет выглядеть следующим образом: чтение старых файлов данных, создание экземпляров ваших объектов hibernate / jpa и сохранение их. (вы также можете написать более эффективный код для непосредственного создания SQL-запросов, но на это потребуется больше времени, и его будет намного сложнее поддерживать при изменении модели jpa)
Встроенная база данных будет иметь свои собственные файлы на диске. Этого будет достаточно для обмена данными между различными рабочими станциями.
Если вы хотите поделиться данными с другими приложениями, вам необходимо разработать эту противоположную функцию импорта: загрузка всех необходимых объектов из базы данных и запись их в другой формат файла. Это может быть вызвано из вашего пользовательского интерфейса приложения.