Hibernate 完全支持 SQLite 吗?

问题描述 投票:0回答:5

Jboss Hibernate 在 其 wiki 中没有提及任何有关 SQLite 的支持。

Stack Overflow 帖子中提到了同样的内容:Hibernate+SQLite+Netbeans

您能强调一下这一点吗?我想将嵌入式 SQLite 与 Hibernate 一起用于 Swing 桌面应用程序。

我也在评估 Derby (JavaDB),因为它也可以嵌入并且是 JDK 的一部分。

java sqlite hibernate jpa
5个回答
60
投票

有几种 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

18
投票

由于 SQLite 是用于类 C 环境的嵌入式数据库,用 C 编写并编译为本机代码,因此 Hibernate(或任何 ORM)支持的更改并不是很高。 Java 是跨平台的,拥有依赖于平台的依赖关系会有点奇怪。在 Android 上,使用 SQLite,但该平台为其提供了 JDBC 驱动程序。

通常,Windows 二进制文件在不同的 Windows 版本上是兼容的 - 只要架构保持不变。如果您查看 SQLite 下载页面,您会注意到有一个 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/休眠/方言

正如 @akostadinov 下面所指出的,您可能还需要考虑其他因素,例如 SQLite 是用本机代码编写的,因此 可能 具有更好的性能。最后,唯一能够决定哪个数据库最好的是构建系统的人。


7
投票

如果您出于某种原因需要将 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 与 hibernate 一起使用,但尝试将它与 infinispan 一起使用,并取得了一些成功。我发现最好推荐的库存 SQLite jdbc 驱动程序缺少一些 JDBC 标准的方法,因此我必须对其进行修补才能使其正常工作。

我认为你可以用hibernate来尝试一下,看看是否有效。它可能会帮助您了解我做了什么让它与 infinispan 一起工作: https://issues.jboss.org/browse/ISPN-2980

我知道这不是您想看到的确切答案,但我决定回答,因为我认为其他人几乎没有机会以更有帮助的方式回答。至少当我寻找更多信息时我找不到。


4
投票

Hibernate 6 开始,SQLite 是 Hibernate 存储库中的社区方言的一部分。

添加以下依赖项:

摇篮:

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 方言:

hibernate.dialect=org.hibernate.community.dialect.SQLiteDialect

在此 Hibernate GitHub 讨论中了解有关 Hibernate 社区维护的方言的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.