Можно ли сохранить постоянные объекты в файловой системе - PullRequest
11 голосов
/ 04 января 2012

Я бы хотел сохранить постоянные объекты в файловой системе с помощью Hibernate без необходимости использования базы данных SQL.

Возможно ли это?

Ответы [ 7 ]

4 голосов
/ 04 января 2012

Hibernate работает поверх JDBC, поэтому все, что вам нужно, это драйвер JDBC и соответствующий диалект Hibernate.

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

Конечно, если вы абсолютно не настаиваете на использовании Hibernate, есть много другихопции.

2 голосов
/ 04 января 2012

У вас уже есть модель сущности, я полагаю, вы не хотите потерять это или взаимосвязи, содержащиеся в ней. Модель сущностей направлена ​​на перевод в реляционную базу данных.

Hibernate и любой другой поставщик JPA (EclipseLink) переводят эту модель сущности в SQL. Они используют драйвер JDBC для обеспечения соединения с базой данных SQL. Это, вы должны также сохранить.

Правильный вопрос: кто-нибудь знает embedded Java SQL database, который вы можете запустить из Java? В этой теме упомянуто множество:

  • HyperSQL: сохраняет результат в текстовом файле SQL, легко импортируемом в любую другую базу данных
  • H2: использует двоичные файлы, низкий размер файла JAR
  • Derby: использует двоичные файлы
  • Ashpool: данные хранятся в XML-структурированном файле

Я использовал HyperSQL в одном проекте для небольших данных и Apache Derby для проекта с огромными базами данных (2 ГБ и более). Apache Derby лучше работает на этих огромных базах данных.

2 голосов
/ 04 января 2012

Похоже, что это технически возможно, если вы используете драйвер открытого текста JDBC; однако я не видел ни одного с открытым исходным кодом, которые предоставляют доступ для записи; тот, который я нашел в sourceforge, доступен только для чтения.

0 голосов
/ 19 января 2012

Ну, так как вопрос все еще открыт, и ОП сказал, что он открыт для новых подходов / предложений, вот мой (немного поздно, но хорошо).

Знаете ли вы Превайлер ? Это реализация Java Prevalence, которая хранит все ваши бизнес-объекты в оперативной памяти и поддерживает моментальные снимки / журналы изменений в файловой системе. Таким образом, это чрезвычайно быстро и надежно, поскольку в случае сбоя он восстанавливает свое последнее состояние и повторно применяет каждое это.

Кроме того, его очень легко настроить и запустить в приложении.

0 голосов
/ 04 января 2012

Оба H2 и HyperSQL поддерживают встроенный режим (работает внутри JVM вместо отдельного сервера) и сохраняются в локальных файлах;это все еще базы данных SQL, но в Hibernate не так много других вариантов.

0 голосов
/ 04 января 2012

Я не знаю точно, что вам нужно, но, возможно, это одно из следующих:

1 - Если вам нужно просто убежать от SQL, вы можете использовать базу данных NoSQL.
Hibernate поддерживает еечерез Hibernate OGM (http://www.hibernate.org/subprojects/ogm).Есть некоторые БД, такие как Cassandra, MongoDB, CouchDB, Hadoop ... У вас есть несколько предложений Здесь .

2 - Теперь, если вы не хотите использовать сервер базы данных (со службойпроцесс выполняется всегда), вы можете использовать Apache Derby.Это БД, как и любой другой SQL, но сервер не нужен.Он использует единственный файл для хранения данных.Вы можете легко перенести всю базу данных с помощью вашей программы.
Взгляните: http://db.apache.org/derby/

3 - Если вам действительно нужен какой-нибудь текстовый простой файл, вы можете сделать так, как сказал Майкл Боргвардт.Но я не знаю, будет ли Hibernate хорошей идеей в этом случае.

0 голосов
/ 04 января 2012

Конечно, это возможно. Вы можете просто использовать функции файла io Java, требуя следующие шаги: -

  1. Создание объекта файла 2. Создание объекта FileInputStream (хотя существуют способы, которыеиспользовать другие классы)
  2. Обернуть этот объект в объект Buffer или просто внутри java.util.Scanner.
  3. использовать специальные функции записи объекта, созданного на предыдущем шаге.

Обратите внимание, что ваш объект должен реализовывать интерфейс Serializable. См. Следующую ссылку ,

...