Jboss Hibernate 在 其 wiki 中没有提及任何有关 SQLite 的支持。
Stack Overflow 帖子中提到了同样的内容:Hibernate+SQLite+Netbeans
您能强调一下这一点吗?我想将嵌入式 SQLite 与 Hibernate 一起用于 Swing 桌面应用程序。
我也在评估 Derby (JavaDB),因为它也可以嵌入并且是 JDK 的一部分。
有几种 SQLite 方言。
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
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
存储库。
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
由于 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 嵌入式数据库,例如 H2、HSQL 或 Derby。后者也作为 JavaDB 随 Oracle Java 一起提供。所有这些都支持 hibernate 方言(有关方言的完整列表,请参阅方言类:https://github.com/hibernate/hibernate-orm/tree/master/hibernate-core/src/main/java/org/休眠/方言)
正如 @akostadinov 下面所指出的,您可能还需要考虑其他因素,例如 SQLite 是用本机代码编写的,因此 可能 具有更好的性能。最后,唯一能够决定哪个数据库最好的是构建系统的人。
如果您出于某种原因需要将 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.
根据我的经验,SQLite 对 SQL 语法非常宽容,所以它可能会起作用。我没有广泛地将 SQLite 与 hibernate 一起使用,但尝试将它与 infinispan 一起使用,并取得了一些成功。我发现最好推荐的库存 SQLite jdbc 驱动程序缺少一些 JDBC 标准的方法,因此我必须对其进行修补才能使其正常工作。
我认为你可以用hibernate来尝试一下,看看是否有效。它可能会帮助您了解我做了什么让它与 infinispan 一起工作: https://issues.jboss.org/browse/ISPN-2980
我知道这不是您想看到的确切答案,但我决定回答,因为我认为其他人几乎没有机会以更有帮助的方式回答。至少当我寻找更多信息时我找不到。
从 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 社区维护的方言的更多信息。