Hibernate полностью поддерживает SQLite
Jboss Hibernate ничего не говорит о поддержке SQLite -
https://community.jboss.org/wiki/SupportedDatabases2
И то же самое упоминается ниже SO:
Hibernate + SQLite + Netbeans
Можете ли вы остановиться на этом. Я хочу использовать встроенный SQLite с hibernate для рабочего стола swing.
Я также оцениваю Derby (JavaDB), поскольку он также может быть встроен и является частью jdk.
Ответы
Ответ 1
Так как SQLite - это встроенная база данных для C-подобных сред, написанная на C и, таким образом, скомпилированная в собственный код, изменения, которые поддерживает Hibernate (или любой ORM), на самом деле невелики. Java является кросс-платформенной, и было бы немного странно иметь зависимую от платформы зависимость. На Android используется SQLite, но там платформа предоставляет для него драйвер JDBC.
Обычно двоичные файлы Windows совместимы с различными версиями Windows, если архитектура остается прежней. Если вы посмотрите на страницу загрузки SQLite, вы увидите там 32-битный предустановленный двоичный файл Windows. Это можно использовать практически для любой версии Windows (кроме Windows RT, возможно), но вы не можете использовать ее в Linux или OS X. Чтобы использовать SQLite с Java, вам нужно будет включить правильный двоичный файл для конкретной ОС/архитектуру, что делает приложение Java зависимым от платформы приложений. Это то, чего вы обычно не хотите.
Если вы создаете настольное приложение в Swing и хотите использовать встроенную базу данных, моим предложением было бы использовать встроенную базу данных Java, например H2, HSQL или Derby. Последняя также поставляется с Oracle Java как JavaDB. Все они поддерживаются как диалоги спящего режима (Полный список диалектов см. В диалектных классах: https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src/main/java/org/hibernate/dialect)
Как указано ниже @akostadinov, могут быть другие факторы, которые вы хотите рассмотреть, например, тот факт, что SQLite написан в собственном коде и, следовательно, может иметь лучшую производительность. В конце концов, единственный, кто может решить, какая из баз данных лучше, - это тот, кто строит систему.
Ответ 2
Существует несколько диалогов SQLite.
Спящий режим 3:
https://github.com/kemitix/sqlite-dialect
<dependency>
<groupId>net.kemitix</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>0.1.0</version>
</dependency>
Конфигурация спящего режима:
hibernate.dialect = org.hibernate.dialect.SQLiteDialect
Спящий режим 4:
https://github.com/EnigmaBridge/hibernate4-sqlite-dialect
<dependency>
<groupId>com.enigmabridge</groupId>
<artifactId>hibernate4-sqlite-dialect</artifactId>
<version>0.1.2</version>
</dependency>
Конфигурация спящего режима:
hibernate.dialect = com.enigmabridge.hibernate.dialect.SQLiteDialect
Примечание. Я автор этого репозитория. На основе репо gwenn
.
Спящий режим 5:
https://github.com/gwenn/sqlite-dialect/
Не добавлен в центральный репозиторий maven. Автор работает с командой Hibernate, чтобы напрямую интегрировать ее в Hibernate. Он отслеживается в этом issue.
Между тем вы можете использовать https://jitpack.io/
Добавить репозиторий jitpack:
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
Добавить зависимость:
<dependency>
<groupId>com.github.gwenn</groupId>
<artifactId>sqlite-dialect</artifactId>
<version>master</version>
</dependency>
Конфигурация спящего режима:
hibernate.dialect = org.hibernate.dialect.SQLiteDialect
Ответ 3
Если вам нужно использовать SQLite с Hibernate по какой-либо причине, тогда вам нужен специальный диалект. Похоже, в Интернете есть пара реализаций.
Я попробовал это: https://github.com/gwenn/sqlite-dialect, который работал у меня с Hibernate 3 (я считаю, что ему нужны некоторые обновления для Hibernate 4). Обратите внимание, что вам придется скомпилировать код самостоятельно, а затем установить свойство конфигурации hibernate.dialect
равным org.hibernate.dialect.SQLiteDialect
.
Другие реализации, которые я нашел: http://code.google.com/p/hibernate-sqlite/ и https://gist.github.com/virasak/54436.
Ответ 4
SQLite очень прощает синтаксис SQL, насколько я знаю, поэтому он может работать. Я не использовал SQLite широко с спящим режимом, но с некоторым успехом использовал его с infinispan. Исходный драйвер SQLite jdbc, который я нашел как рекомендуемый, не имеет некоторых стандартных методов JDBC, поэтому мне пришлось его исправлять, чтобы он работал.
Я думаю, что вы можете попробовать его спящий режим и посмотреть, работает ли он. Это может помочь вам увидеть, что я сделал, чтобы он работал с infinispan:
https://issues.jboss.org/browse/ISPN-2980
Я знаю, что это не точный ответ, который вы хотели бы видеть, но я решил ответить, потому что я думаю, что есть шанс, что кто-нибудь еще ответит более полезным способом. По крайней мере, когда я искал дополнительную информацию в то время, когда я не мог найти.