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

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