web-dev-qa-db-ja.com

HibernateはSQLiteを完全にサポートしますか

Jboss HibernateはSQLiteのサポートについては何も言っていません-

https://community.jboss.org/wiki/SupportedDatabases2

そして、同じことが以下のSOで言及されています:

Hibernate + SQLite + Netbeans

これについて強調してください。 Swingデスクトップアプリケーション用に、休止状態で埋め込みSQLiteを使用したい。

また、埋め込みが可能であり、jdkの一部であるDerby(JavaDB)を評価しています。

40
Atul

SQLiteはCに似た環境用の組み込みデータベースであり、Cで記述されてネイティブコードにコンパイルされるため、Hibernate(またはORM)がサポートする変更はそれほど大きくありません。 Javaはクロスプラットフォームであり、プラットフォームに依存する依存関係を持つことは少し奇妙です。AndroidではSQLiteが使用されますが、プラットフォームはそのためのJDBCドライバーを提供します。

通常、アーキテクチャが同じである限り、Windowsバイナリは異なるWindowsバージョンと互換性があります。 SQLiteダウンロードページ を見ると、32ビットのビルド済みWindowsバイナリがあることに気付くでしょう。これはほぼすべてのWindowsバージョン(Windows RTを除く)で使用できますが、LinuxまたはOS Xでは使用できません。JavaからSQLiteを使用するには、特定のOSの正しいバイナリを含める必要があります。アーキテクチャ、実質的にJavaアプリケーションプラットフォーム依存。

Swingでデスクトップアプリケーションを構築していて、組み込みデータベースを使用する場合、Java H2 、-のような組み込みデータベースを使用することをお勧めします [〜#〜] hsql [〜#〜] または Derby 。後者もOracleに同梱されていますJava as JavaDB 。すべてが休止状態の方言としてサポートされています(方言の完全なリストについては、方言クラスを参照してください: https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src/main/Java/org/hibernate/dialect

以下で@akostadinovが述べているように、考慮したい他の要因があるかもしれません。たとえば、SQLiteはネイティブコードで記述されているため、mayはよりよい性能。最終的に、どのデータベースが最適であるかを決定できるのは、システムを構築している人だけです。

17
mthmulders

SQLiteにはいくつかの方言があります。

Hibernate 3:

https://github.com/kemitix/sqlite-dialect

<dependency>
    <groupId>net.kemitix</groupId>
    <artifactId>sqlite-dialect</artifactId>
    <version>0.1.0</version>
</dependency>  

Hibernate設定:

hibernate.dialect = org.hibernate.dialect.SQLiteDialect

Hibernate 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設定:

hibernate.dialect = com.enigmabridge.hibernate.dialect.SQLiteDialect

注:私はこのリポジトリの作成者です。 gwennリポジトリに基づきます。

Hibernate 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設定:

hibernate.dialect = org.hibernate.dialect.SQLiteDialect
35
ph4r05

何らかの理由でHibernateでSQLiteを使用する必要がある場合は、カスタム方言が必要です。ウェブ上でいくつかの実装が行われているようです。

私はこれを試しました: 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

6
jgibson

SQLiteは、私が経験している限り、SQL構文について非常に寛容なので、動作する可能性があります。休止状態でSQLiteを広範囲に使用したことはありませんが、infinispanでSQLiteを使用しようとしましたが、ある程度成功しました。最も推奨されると思った標準のSQLite jdbcドライバーには、JDBC標準のメソッドの一部が欠けているため、動作させるためにパッチを適用する必要がありました。

休止状態で試してみて、動作するかどうかを確認できると思います。 infinispanで動作させるために私がしたことを確認するのに役立つかもしれません: https://issues.jboss.org/browse/ISPN-298

私はこれがあなたが見たいと思う正確な答えではないことを知っていますが、他の誰かがより役立つ方法で答える可能性はほとんどないと思うので、答えることにしました。少なくとも、私が見つけることができなかったときに、より多くの情報を探していたとき。

3
akostadinov