jpa Hibernate完全支持SQLite吗

bvpmtnay  于 2023-01-17  发布在  SQLite
关注(0)|答案(5)|浏览(358)

Jboss Hibernate没有提到its wiki中对SQLite的支持:
和相同的是在下面提到堆栈溢出后:Hibernate+SQLite+NetBeans
你能强调一下吗?我想在Swing桌面应用程序中使用嵌入式SQLite和Hibernate。
我还在评估Derby(JavaDB),因为它也可以嵌入,并且是JDK的一部分。

2uluyalo

2uluyalo1#

有几种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/
作者与Hibernate团队合作,将其直接集成到Hibernate中。它在这个issue中被跟踪。
添加此依赖项:

<dependency>
        <groupId>com.github.gwenn</groupId>
        <artifactId>sqlite-dialect</artifactId>
        <version>0.1.2</version>
    </dependency>

休眠配置:

hibernate.dialect = org.sqlite.hibernate.dialect.SQLiteDialect
mrwjdhj3

mrwjdhj32#

由于SQLite是一个嵌入式数据库,用于类C环境,用C编写,因此编译为本地代码,Hibernate(或任何ORM)支持的更改并不多。Java是跨平台的,因此有一个依赖于平台的依赖项会有点奇怪。在Android上,使用SQLite,但该平台为它提供了JDBC驱动程序。
通常,Windows二进制文件在不同的Windows版本上是兼容的--只要架构保持不变。如果你看一下SQLite download page,你会注意到它有一个32位的预构建Windows二进制文件。这个文件几乎可以在任何Windows版本上使用(Windows RT可能除外),但您不能在Linux或OS X上使用它。为了从Java中使用SQLite,你需要为特定的操作系统/体系结构包含正确的二进制文件,这实际上使Java应用程序依赖于平台,这通常是你不想要的。
如果您正在Swing中构建桌面应用程序,并且希望使用嵌入式数据库,我的建议是使用Java嵌入式数据库,如H2HSQLDerby。后者也作为JavaDB随Oracle Java一起提供。所有这些数据库都支持作为Hibernate方言(有关方言的完整列表,请参见方言类:https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src/main/java/org/hibernate/dialect
正如@akostadinov所指出的,您可能需要考虑其他因素,例如SQLite是用本地代码编写的,因此 * 可能 * 具有更好的性能。最终,唯一能够决定哪个数据库最好的人是构建系统的人。

huwehgph

huwehgph3#

如果你出于某种原因需要在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

ggazkfy8

ggazkfy84#

SQLite是非常宽容的SQL语法,因为我有经验,所以它可能会工作。我没有使用SQLite广泛与hib,但尝试使用它与infinispan有一些成功。股票SQLite jdbc驱动程序,我发现作为最好的推荐,缺乏一些JDBC标准的方法,所以我不得不打补丁,让它工作。
我想你可以用Hibernate试试看它是否能用。看看我是怎么让它和Infinispan一起工作的,可能会对你有帮助:https://issues.jboss.org/browse/ISPN-2980
我知道这不是你希望看到的确切答案,但我决定回答,因为我认为没有其他人能以更有帮助的方式回答,至少当我当时寻找更多信息时,我找不到。

0pizxfdo

0pizxfdo5#

Hibernate 6中,SQLite是community dialects in the Hibernate repository的一部分。
添加以下依赖项:
等级:

implementation("org.hibernate.orm:hibernate-community-dialects:6.1.6.Final")

玛文:

<dependency>
    <groupId>org.hibernate.orm</groupId>
    <artifactId>hibernate-community-dialects</artifactId>
    <version>6.1.6.Final</version>
</dependency>

并将其设置为Hibernate方言:

org.hibernate.community.dialect.SQLiteDialect

阅读Hibernate GitHub discussion中关于Hibernate社区维护的方言的更多信息。

相关问题